这可能是疯了。
我想将依赖注入(inject)的想法发挥到极致。我已将所有与 System.IO 相关的行为隔离到一个类中,以便我可以在我的其他类中模拟该类,从而减轻我的大型单元测试套件担心实际文件系统的负担。
但是我最终得到的 File IO 类只能通过集成测试进行测试,这当然会引入复杂性,我真的不想处理,而我真正想做的就是确保我的 FileIO类调用正确的 System.IO 内容。我不需要集成测试 System.IO。我的 FileIO 类不仅仅是简单地包装 System.IO 函数,它时不时地包含一些逻辑(也许这就是问题所在?)。
所以我想要的是能够测试我的文件 IO 类,以确保它通过模拟 System.IO 类本身来进行正确的系统调用。理想情况下,这就像拥有这样的构造函数一样简单:
public FileIO(
System.IO.Directory directory,
System.IO.File file,
System.IO.FileStream fileStream
)
{
this.Directory = directory;
this.File = file;
this.FileStream = fileStream;
}
然后调用如下方法:
public GetFilesInFolder(string folderPath)
{
return this.Directory.GetFiles(folderPath)
}
但这行不通,因为所讨论的 System.IO 类是静态类。据我所知,它们既不能以这种方式实例化,也不能为了模拟的目的而被子类化。
最佳答案
创建一个包含简单重定向到 System.IO 的函数的类。创建另一个伪造/模拟 System.IO 的类。让这两个类都实现一个公共(public)接口(interface)。那么您就不必担心 System.IO 充满了静态。
关于c# - 将系统类作为构造函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2652897/