如何MOQ System.IO.FileInfo类…或没有接口的任何其他类?

我正在为我创建的记录器类编写一些unit testing,我想模拟文件类。 我找不到我需要用来创建MOQ的接口……那么如何在没有接口的情况下成功MOQ一个类?

我还不清楚如何在没有可用接口的情况下使用dependency injection:

private FileInfo _logFile; public LogEventProcessorTextFile(FileInfo logFile) { _logFile = logFile; } 

当我真的想做这样的事情时(注意IFileInfo而不是FileInfo):

 private IFileInfo _logFile; public LogEventProcessorTextFile(IFileInfo logFile) { _logFile = logFile; } 

使用SystemWrapper ,这是一个为许多.NET类提供接口和可模拟包装类的库,这些类本身不实现接口。

设计代码,以便不是直接访问FileInfo类,而是访问具有相同function的接口(例如,命名为IFileInfo )。 在生产代码中,您将使用一个只将其所有function委托给系统FileInfo类的类,但是对于unit testing,您可以模拟该接口。

例如,在我根据当前日期采取不同行为的应用程序中,我声明了以下界面:

 interface IDateTimeProvider { DateTime Today(); } 

而生产类只是:

 class DateTimeProvider : IDateTimeProvider { public DateTime Today() { return DateTime.Today; } } 

您可以使用dependency injection引擎来补充此方法,以确定是否应在每种情况下使用真实类或模拟。

这可以帮助您简化静态或非可模拟第三方类的包装类的创建。 此工具将在Visual Studio项目上生成Interface和任何现有类(如System.IO)的具体包装类。

https://www.nuget.org/packages/Digitrish.WrapperGenerator/