【发布时间】:2019-07-01 17:27:14
【问题描述】:
我有一个函数用来检测某个目录路径是否存在。函数如下:
public boolean isRunningOnSandbox() {
return Files.isDirectory(Paths.get("/mySandbox/cloud/sandbox"));
}
如您所见,它依赖于静态方法 isDirectory。在我的团队中,我们不使用 PowerMock 进行测试。
那么,我该如何测试这个方法呢?我试过写一个像这样的测试:
@Rule
public TemporaryFolder temporaryFolder;
@Test
public void test() throws IOException {
File parent = new File("/");
temporaryFolder = new TemporaryFolder(parent);
temporaryFolder.create();
File folder = temporaryFolder.newFolder("mySandbox", "cloud", "sandbox");
subject.isRunningOnSandbox();
}
但是,我得到一个错误
ava.io.IOException: Permission denied
因为它不允许我在根目录下创建临时文件夹。我猜有更好的方法来测试此代码,而不是尝试创建文件夹。
【问题讨论】:
-
我倾向于允许注入值并使用
tempdir验证方法调用,并断言isRunningOnSandbox在使用 tempdir 时返回 true,否则返回 false,然后进行额外测试通过另一个测试验证每个区域/env/space/whatever 中的值。 -
你愿意重构这个紧密耦合的代码并使用依赖倒置来隔离被测代码吗?如果访问实际文件夹,当前示例更多的是集成测试。
-
我认为您还需要处理该异常并在出现
Permissions denied异常的情况下返回false。 -
请使用正确的标签,这不是单元测试,而是集成测试
标签: java junit integration-testing