1

我只想编写一个 JUnit 测试用例,它只测试我下面的代码是否已成功将目录复制到新目录。

File origPath = new File("/sourceDir/");

File newPath = new File("/destDir/");

try {
    FileUtils.copyDirectory(origPath, newPath);
    } catch (Throwable e) {

    }

请建议,我如何编写 JUnit 测试或模拟来测试上述代码。

4

4 回答 4

4

您需要临时文件夹规则。

@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();

然后创建一个新文件夹:

File source = tempFolder.newFolder();

然后调用 copyDirectory 方法:

FileUtils.copyDirectory(source.getAbsolutePath(), source.getParent() + "/dest");

然后您可以检查该文件夹是否存在:

new File(tempFolder.getRoot(), "dest").exists()
于 2013-01-16T12:01:12.757 回答
3

一个简单的解决方案是检查/sourceDir/目录中是否存在所有文件/destDir/

File origPath = new File("/sourceDir/");
File newPath = new File("/destDir/");
for (File file : origPath.listFiles()) {
    assertTrue(new File(newPath, file.getName()).exists());
}
于 2013-01-16T11:59:46.627 回答
3

你可以模拟,但这只会测试你调用的一些方法,而不是它实际工作,即它看起来更像一个集成测试,我会简单地创建一些真正的测试,例如:

  1. 检查虚假目录是否不存在(“Asdlkjslajfrhg”)尝试复制它并确保您得到正确的异常
  2. 创建一个假目录,复制它并确保新目录已创建并且为空
  3. 创建一个假目录和一些包含数据的文件,复制该目录并确保已创建新目录并包含所有具有相同内容的文件
  4. 确保在每次测试后清洁所有物品

注意:最近版本的 JUnit 包含一个TemporaryFolderclass,它应该可以帮助您处理大部分“伪造目录”部分。另请参阅此帖子以获取示例。

于 2013-01-16T12:00:20.927 回答
2

除非在任何测试中使用模拟的方法中有很多非 IO 逻辑copyDirectory是没有意义的,因为它只会测试代码调用执行它包含的操作。

所以测试将不得不:

  • 创建一个源目录并向其中写入文件。
  • 创建目标目录。
  • 调用copyDirectory方法。
  • 读取目标目录的内容并断言内容。
  • 清理。
于 2013-01-16T12:00:25.813 回答