在某些情况下,软件会根据某些环境条件而表现不同,例如文件是否存在于某个地方。
就我而言,我正在开发一个库,它是根据类路径中的配置文件进行配置的(如果配置文件不存在,则返回到默认行为)。
我该如何对这个类进行单元测试? 我需要编写测试来评估以下情况下的类:
- 类路径上不存在该文件
- 内容为 A 的文件存在于类路径中
- 类路径中存在内容为 B 的文件
但我不知道如何配置环境来证明所有这些都是合理的。并依次执行测试。
顺便说一下,我使用的是 Java,并且测试类路径上有 JUnit 和 TestNG。
<小时/>编辑: 问题之一是配置文件驻留在类路径中,因此如果普通的类加载器找到并加载它,只要使用相同的类加载器,它就会返回相同的内容。 而且我相信使用自定义类加载器进行测试非常复杂,需要测试来验证测试!
最佳答案
您可以使用测试创建的临时文件来模拟类中的路径。
配置测试.java:
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeThat;
import java.nio.file.Files;
import org.junit.Test;
public class ConfigurationTest {
private Configuration config = new Configuration();
@Test
public void testWithConfigFile() throws Exception {
config.configFile = Files.createTempFile("config_",".ini");
config.configFile.toFile().deleteOnExit();
assertFalse(config.isInDefaultMode());
}
@Test
public void testWithoutConfigFile() throws Exception {
assumeThat(Files.exists(config.configFile), is(false));
assertTrue(config.isInDefaultMode());
}
}
配置.java:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Configuration {
Path configFile = Paths.get("config.ini");
public boolean isInDefaultMode() {
return !Files.exists(configFile);
}
}
关于java - 对文件存在的不同行为进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633248/