如何为将目录复制到目录的API编写JUnit测试

时间:2013-01-16 11:50:02

标签: java junit directory

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

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

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

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

    }

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

4 个答案:

答案 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)

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

  1. 检查假目录是否存在(“Asdlkjslajfrhg”)尝试复制它并确保获得正确的异常
  2. 创建一个假目录,复制它并确保新目录已创建且为空
  3. 创建一个假目录和一些包含数据的文件,复制目录并确保新目录已创建并包含所有具有相同内容的文件
  4. 确保在每次测试后清理所有内容
  5. 注意:最新版本的JUnit包含TemporaryFolder class,它可以帮助您处理大多数“伪造目录”部分。另请参阅this post以获取示例。

答案 3 :(得分:1)

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

所以测试必须:

  • 创建一个源目录并将文件写入其中。
  • 创建目标目录。
  • 调用copyDirectory方法。
  • 读取目标目录的内容并断言内容。
  • 清理。