Inv*_*ion 25 .net c# unit-testing interface moq
我正在为我创建的记录器类编写一些单元测试,我想模拟文件类.我找不到我需要用来创建MOQ的接口...那么如何在没有接口的情况下成功MOQ一个类?
我还不清楚如何在没有可用接口的情况下使用依赖注入:
private FileInfo _logFile;
public LogEventProcessorTextFile(FileInfo logFile) {
_logFile = logFile;
}
Run Code Online (Sandbox Code Playgroud)
当我真的想做这样的事情时(注意IFileInfo而不是FileInfo):
private IFileInfo _logFile;
public LogEventProcessorTextFile(IFileInfo logFile) {
_logFile = logFile;
}
Run Code Online (Sandbox Code Playgroud)
Kon*_*man 32
设计代码,以便不使用FileInfo
直接访问类,而是访问IFileInfo
具有相同功能的接口(例如,命名).在生产代码中,您将使用一个只将其所有功能委托给系统FileInfo
类的类,但是对于单元测试,您可以模拟接口.
例如,在我根据当前日期采取不同行为的应用程序中,我声明了以下界面:
interface IDateTimeProvider
{
DateTime Today();
}
Run Code Online (Sandbox Code Playgroud)
而生产类只是:
class DateTimeProvider : IDateTimeProvider
{
public DateTime Today()
{
return DateTime.Today;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用依赖注入引擎来补充此方法,以确定是否应在每种情况下使用真实类或模拟.