我有一个同步两个文件夹的方法,如下所示:
void Synchronize(string folderAPath, string folderBPath)
{
//Code to synchronize the folders
}
测试文件是否正确同步的最佳方法是什么,或者通常是测试操作文件系统的测试方法?有没有办法设置虚拟文件夹?
答案 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)