如何测试文件系统操作

时间:2011-02-20 21:55:14

标签: c# .net unit-testing testing

我有一个同步两个文件夹的方法,如下所示:

void Synchronize(string folderAPath, string folderBPath)
{
    //Code to synchronize the folders
}

测试文件是否正确同步的最佳方法是什么,或者通常是测试操作文件系统的测试方法?有没有办法设置虚拟文件夹?

5 个答案:

答案 0 :(得分:8)

正如@BrokenGlass已经建议的那样,将实际的API隐藏在一个可模拟的接口后面,可以让你对你的逻辑进行单元测试。我会这样做只是因为那里有充分的逻辑来证明使接口单元可测试所需的额外复杂性。测试代码在真实情况下真正起作用,真正的文件系统无论如何都需要集成测试,所以在简单的情况下可以跳过单元测试,更有效地使用有限的资源。

答案 1 :(得分:7)

您可以定义一个接口IFileSystem,它提供与文件相关的方法并将其传递到您的Synchronize方法中。对于真实系统,您使用真正的文件I / O实现接口,对于您的测试,您可以根据您预先设置的测试数据传递仅在内存中运行的实现,但不会触及真实的文件系统。

顺便说一句,使用依赖于文件系统的测试没有任何错误,特别是如果伪造被测试方法所期望的数据非常困难 - 而这些测试可以被认为是“集成”类测试,与单元测试相反,它们仍然提供了价值。

答案 2 :(得分:0)

你没有选择,只能写一个包装器。

编辑:更新了链接,这是一个NuGet!
看看这个:http://weblogs.asp.net/bleroy/archive/2010/11/19/fluentpath-1-0.aspx

修改
Erg,刚看到我链接的库没有额外的抽象层来启用测试。 但是,嘿,它是开源的;)

答案 3 :(得分:0)

我没有看到测试文件系统操作的重点。只需打开文件,就可以通过打开不同的文件来测试不同的数据。

答案 4 :(得分:-1)

我过去曾在Hyper-V上使用虚拟机取得了巨大成功。您可以使用snapshots创建一个已知状态,并根据需要多次返回测试目的。其他虚拟机技术也可能会起作用。

我们为开发中需要进行文件系统测试的每个系统设置了一个虚拟机。已设置快照以及众所周知的起始状态。作为测试脚本的一部分,将应用快照并运行测试。这是一个无痛的过程,并且完全自动化。

根据我们的经验,此解决方案已被证明优于“假”方法,例如模拟文件系统,因为它为我们提供了文件系统的真实,混乱,不可预测的行为。耗尽空间,权限问题,RAID故障,重新分析点问题等很难模拟。