我想编写一个测试文件内容加载的测试。在示例中,用于加载内容的类是
FileClass
和方法
GetContentFromFile(string path).
有没有办法嘲笑
File.exists(string path)
具有moq?的给定示例中的方法
示例:
我有一个类有这样的方法:
public class FileClass
{
public string GetContentFromFile(string path)
{
if (File.exists(path))
{
//Do some more logic in here...
}
}
}
答案 0 :(得分:5)
由于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等不会。