我正在测试一个可能修改文件的函数。在我想要的情况下,我如何测试它是否保持不变?
- 我不想检查内容,因为文件可能已经被相同的内容覆盖,改变了修改时间。
- 我也无法真正检查修改时间。由于我喜欢独立的测试,原始文件将在(非)修改测试之前编写,从而使修改时间不可靠。
我正在测试一个可能修改文件的函数。在我想要的情况下,我如何测试它是否保持不变?
您可以使用 DI 来模拟您的文件编写器。这样你根本不需要文件,只检查是否调用了 write 函数并且你知道文件是否被修改。
我会将函数拆分为两个单独的函数;第一个决定是否应该进行修改,第二个发出通知。第二个仅在必要时调用。假装语言:
function bool IsModificationRequired()
{
// return true or false based on your actual code
}
function void WriteFile()
{
new File().Write("file");
}
function void WriteIfModified()
{
if (IsModificationRequired())
WriteFile();
}
并测试
Assert.IsTrue(IsModificationRequired());
假设您使用的是文本文件且大小合理。只需对文件内容进行哈希处理,如果修改之前和修改后的哈希码相同,则表示文件内容未更改。
这是 Algorithim 设计手册的链接 - Steve Skiena(Google 图书结果)第 3.8 节 我如何说服您文件未更改?