【发布时间】:2021-07-02 21:04:46
【问题描述】:
我写了一个简单的方法,它接受一个文件夹的路径,压缩该文件夹内的所有内容,并将其保存到指定的目标路径。
void zipFiles(string sourcePath, string destinationPath, string nameToZipAs)
{
try
{
// This is where the zip file will be saved.
string fullDestinationPath = $"{destinationPath}\\{nameToZipAs}";
ZipFile.CreateFromDirectory(sourcePath, fullDestinationPath);
}
catch (Exception e)
{
// ...
}
}
我想知道如何进行单元测试。我读到单元测试不应该触及文件系统。这是正确的好习惯吗?如果是这样,那么我无法在单元测试中创建一个文件夹(以编程方式),以便用我的方法压缩该文件夹以验证它是否有效。
【问题讨论】:
-
在这种情况下存在紧密耦合。 ZipFile 将由其开发人员进行广泛的测试。为了测试它与您的代码的交互,您需要进行集成测试。但是要单独测试您的代码,您需要抽象压缩过程。
-
@Nkosi 能否请您在说“抽象压缩过程”时详细说明一下?
-
您将把静态
ZipFile.CreateFromDirectory(sourcePath, fullDestinationPath);包装在抽象和实现之后,然后将抽象作为显式依赖注入到被测主题中。这将有助于将您的代码与静态实现细节分离,并帮助隔离您的代码。 -
System.IO.Abstractions 可能会有所帮助
-
模拟框架有两种类型:受约束的和不受约束的。前者:Moq、NSubstitute、FakeItEasy - 只允许您伪造虚拟会员。后者:TypeMock、JustMock、MS Fakes、Prig、Ionad.Fody、Pose、Harmony、MethodRedirect——允许你伪造任何你想要的东西:非虚拟、私有和静态成员、密封类等等。您可以使用它们来模拟
ZipFile.CreateFromDirectory方法。
标签: c# unit-testing