【发布时间】:2019-09-02 07:42:28
【问题描述】:
我有一个 API,其中文件放置在某个不同的目录中,文件名由固定的前缀/后缀部分组成。我想抽象出这些部分,以便我的助手类的用户可以专注于需要做的事情。
示例代码:
static class FileManager {
Path getFilePath(String arg) {
return Paths.get("/whatever", "prefix_" + arg + "_postfix");
}
void deleteFileIfExists(Path path) {
if (path.toFile().exists())
path.toFile().delete();
}
public void deleteFileIfExistsUsing(String arg) {
deleteFileIfExists(getFilePath(arg));
}
}
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void testGetFilePath() {
assertThat(new FileManager().getFilePath("bar"), is(Paths.get("/whatever/prefix_bar_postfix")));
}
@Test
public void testDelete() throws IOException {
File subfolder = temporaryFolder.newFolder("whatever");
File fileToDelete = new File(subfolder, "prefix_bar_postfix");
fileToDelete.createNewFile();
assertThat(fileToDelete.exists(), is(true));
new FileManager().deleteFileIfExists(fileToDelete.toPath());
assertThat(fileToDelete.exists(), is(false));
}
如您所见,完全可以测试getFilePath() 和deleteFileIfExists()。但是有没有一种有意义的方法来测试一个 API deleteFileIfExistsUsing(String)?
我看到的唯一选择:有 another 类提供基于路径的调用,然后给FileManager 一个该类的实例......然后可以模拟。但这感觉有点矫枉过正。
那么:还有其他方法可以测试来自FileManager 的公共方法吗?
(旁注:一个目标是单元测试在某种程度上独立于平台。上面实际上适用于 Linux 和 Windows)
【问题讨论】:
标签: java file unit-testing junit temporary-files