首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何MOQ System.IO.FileInfo类..。或者任何其他没有接口的类?

我如何MOQ System.IO.FileInfo类..。或者任何其他没有接口的类?
EN

Stack Overflow用户
提问于 2009-10-17 16:28:52
回答 4查看 13.6K关注 0票数 29

我正在为我创建的一个记录器类编写一些单元测试,我想要模拟这个file类。我找不到需要用来创建MOQ的接口...那么,如何成功地MOQ一个没有接口的类呢?

我也不清楚如何在没有可用的接口的情况下使用依赖注入:

代码语言:javascript
复制
private FileInfo _logFile;

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

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

代码语言:javascript
复制
private IFileInfo _logFile;

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-18 09:08:08

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

票数 20
EN

Stack Overflow用户

发布于 2009-10-17 16:53:11

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

例如,在我制作的一个应用程序中,根据当前日期的不同,我声明了以下接口:

代码语言:javascript
复制
interface IDateTimeProvider
{
    DateTime Today();
}

而production类仅仅是:

代码语言:javascript
复制
class DateTimeProvider : IDateTimeProvider
{
    public DateTime Today()
    {
        return DateTime.Today;
    }
}

您可以通过使用依赖注入引擎来补充这种方法,以决定在每种情况下都应该使用真正的类还是模拟类。

票数 34
EN

Stack Overflow用户

发布于 2013-08-27 08:55:03

这可能有助于您简化静态或不可模拟第三方类的包装器类的创建。此工具将在您的Visual Studio项目中生成接口和任何现有类的具体包装类,例如System.IO。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1582596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档