【问题标题】:Mock File.Exists method in Unit Test (C#) [duplicate]单元测试(C#)中的模拟 File.Exists 方法 [重复]
【发布时间】:2011-07-31 23:19:15
【问题描述】:

可能重复:
.NET file system wrapper library

我想编写一个测试,其中加载了文件的内容。在示例中,用于加载内容的类是

FileClass

以及方法

GetContentFromFile(string path).

有什么办法可以模拟

File.exists(string path)

给定示例中的最小起订量方法?

例子:

我有一个具有类似方法的类:

public class FileClass 
{
   public string GetContentFromFile(string path)
   {
       if (File.exists(path))
       {
           //Do some more logic in here...
       }
   }
}

【问题讨论】:

标签: c# .net unit-testing moq


【解决方案1】:

由于 Exists 方法是 File 类上的静态方法,因此您不能模拟它(参见底部的注释)。解决此问题的最简单方法是围绕 File 类编写一个瘦包装器。这个类应该实现一个可以注入到你的类中的接口。

public interface IFileWrapper {
    bool Exists(string path);
}

public class FileWrapper : IFileWrapper {
    public bool Exists(string path) {
        return File.Exists(path);
    }
}

然后在你的课堂上:

public class FileClass {
   private readonly IFileWrapper wrapper;

   public FileClass(IFileWrapper wrapper) {
       this.wrapper = wrapper;
   }

   public string GetContentFromFile(string path){
       if (wrapper.Exists(path)) {
           //Do some more logic in here...
       }
   }
}

注意: TypeMock 允许您模拟静态方法。其他流行的框架,例如Moq、Rhino Mocks 等,不要。

【讨论】:

  • 我认为你打错了。 if (wrapper.FileExists(path)) { //在这里做更多的逻辑... } 应该只是对 wrapper.Exists 的调用
  • 我做到了。固定的。谢谢!
  • 另外值得注意的是,由于这个答案最初是编写的,微软在 Visual Studio 中添加了类似于 TypeMock 的功能——它被称为 Fakes 框架。
猜你喜欢
  • 2014-04-16
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2011-04-11
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
相关资源
最近更新 更多