Moq c# 目录方法单元测试

问题描述 投票:0回答:2

我想为 Directory.GetFiles() 等方法编写单元测试,但它需要路径作为参数。我有一个包含 GetAllFiles 方法的接口,该方法在内部调用此方法。我把它模拟如下:

var mockFile = new Mock<IFileImplement>();
mockFile.Setup(_ => _.GetAllFiles(It.IsAny<string>())).Returns(new[] {"text1.txt", "text2.txt"});

但是,当我调用GetAllFiles方法来测试它时,应该输入什么路径?因为我不想让它检查实际目录,但我收到错误消息,找不到路径?

c# moq
2个回答
0
投票

我认为,你应该创建mockFile并且可以编写单元测试。

var mockFile= new MockFileData(new byte[4])//内容为字节数组 var mockFileSystem = new MockFileSystem();

然后您应该将文件目录添加到文件系统(.AddDirectory(directory))并将文件添加到文件系统(.AddFile(directory,yourFileasbyteArray))

您需要关注 System.IO.Abstractions 。它绝对对你有帮助。 因此,您需要创建模拟文件和系统。


0
投票

查看 System.IO.Abstractions,因为它已经创建了您想要的抽象。

话虽如此。他们的实现大致是创建带有接口的非静态类。目前,这些是唯一可以使用 Moq 这样的库进行模拟的方法。

我已经为“DateTime”库做了类似的解决方案,但由于大脑放屁而失败了。我不会完成该项目,因为 Microsoft 现在有一个 TimeProvider 类。

Nick Chapsa 有一个视频解释如果您喜欢这种格式,如何编写一个简单的界面。他还展示了如何使用 Microsoft 的 TimeProvider

当我在上面写下“目前这些是唯一的方法...”时,它即将随着 C#12 中的 Interceptors 而改变。

© www.soinside.com 2019 - 2024. All rights reserved.