我正在为以下方法设计单元测试:
public void loadFile(Path filename) throws IOException {
try {
// do something
} catch (RuntimeException ex) {
Files.move(filename, filename.resolveSibling("ERROR_" + filename.getFileName()));
return;
}
Files.delete(filename);
}
我正在寻找一种测试它而不产生不同结果的方法,因为在执行测试之后输入文件将被重命名或删除:
- 如果发生
RuntimeException
,则重命名文件。 - 如果执行按预期进行,则删除文件。
无论哪种方式,连续运行测试都会使其失败,因为文件将被命名为不同的名称或它将不存在...我如何防止这种情况?另外,是否有方法验证Files#move(Path, Path, CopyOption...)
和Files#delete(Path)
是否被调用?
1条答案
按热度按时间rxztt3cl1#
我建议使用来自
junit 5
的新@TempDir
注解。Docs:
当到达临时目录范围的末尾时,即当测试方法或类已经完成执行时,JUnit将尝试递归地删除临时目录中的所有文件和目录,最后删除临时目录本身。
在这种情况下,您的测试用例将如下所示:
在这两种情况下,创建的文件将在执行后自动删除。