我刚读完《单元测试的艺术》这本书,遇到了一个关于测试模式的架构问题。
为了测试是否使用了外部库的方法,本书建议使用接口制作包装器。这样,您就可以使用接口进行模拟。我做了一个使用 .net 方法 File.Exists 的例子
public interface IFile
{
bool Exists(string path);
}
public class File : IFile
{
bool IFile.Exists(string path)
{
return System.IO.File.Exists(path);
}
}
[TestMethod]
[ExpectedException(typeof(System.IO.FileNotFoundException))]
public void Constructor_WithNonExistingFile_ThrowsFileNotFoundException()
{
Mock<IFile> fileMock = new Mock<IFile>();
Mock<ICompositionContainer> compositionMock
= new Mock<ICompositionContainer>();
fileMock.Setup(f => f.Exists(It.IsAny<string>())).Returns(false);
Loader<object> loader = new Loader<object>(
"testfile",
fileMock.Object,
compositionMock.Object);
}
我的问题是这是否是一种好的做法,如果是这样,我应该为我想要测试的所有 .net 方法/类制作接口和包装器吗?