Design your code so that instead of accessing the FileInfo
class directly, access an interface (named for example IFileInfo
) with the same capabilities. In production code you will use a class that just delegates all its functionality to the system FileInfo
class, but for unit testing you can mock the interface.
For example, in an application I made that acted differently depending on the current date, I declared the following interface:
interface IDateTimeProvider
{
DateTime Today();
}
And the production class was just:
class DateTimeProvider : IDateTimeProvider
{
public DateTime Today()
{
return DateTime.Today;
}
}
You can complement this approach with the usage of a dependency injection engine to decide whether a real class or a mock should be used in each case.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…