我只想编写一个JUnit测试用例,它只测试我的下面的代码是否已成功将目录复制到新目录。
File origPath = new File("/sourceDir/");
File newPath = new File("/destDir/");
try {
FileUtils.copyDirectory(origPath, newPath);
} catch (Throwable e) {
}
请建议我如何编写JUnit测试或模拟以测试上述代码。
答案 0 :(得分:3)
您需要TemporaryFolder规则。
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
然后您创建一个新文件夹:
File source = tempFolder.newFolder();
然后你调用copyDirectory-method:
FileUtils.copyDirectory(source.getAbsolutePath(), source.getParent() + "/dest");
然后你可以检查文件夹是否存在:
new File(tempFolder.getRoot(), "dest").exists()
答案 1 :(得分:2)
一个简单的解决方案是检查目录/sourceDir/
中是否存在/destDir/
的所有文件:
File origPath = new File("/sourceDir/");
File newPath = new File("/destDir/");
for (File file : origPath.listFiles()) {
assertTrue(new File(newPath, file.getName()).exists());
}
答案 2 :(得分:2)
你可以模拟,但这只会测试你调用一些方法,而不是它实际上有效,即它看起来更像是一个集成测试,我只想创建一些真正的测试,例如:
注意:最新版本的JUnit包含TemporaryFolder
class,它可以帮助您处理大多数“伪造目录”部分。另请参阅this post以获取示例。
答案 3 :(得分:1)
除非在任何测试中使用模拟的copyDirectory
方法中有很多非IO逻辑是没有意义的,因为它只会测试代码调用执行它包含的操作。
所以测试必须:
copyDirectory
方法。