如何测试文件系统操作

Fla*_*bug 6 .net c# testing unit-testing

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

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

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

Pét*_*rök 8

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


Bro*_*ass 7

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

顺便说一句,imo使用依赖于文件系统的测试是没有错的,特别是如果很难伪造被测方法所期望的数据 - 而这些测试可以被认为是"集成"类测试,而不是单元测试他们仍然提供价值.