gpt4 book ai didi

c# - 将系统类作为构造函数参数传递

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:32 25 4
gpt4 key购买 nike

这可能是疯了。

我想将依赖注入(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com