在某些情况下,软件应根据某些环境条件采取不同的行为,例如某个地方是否存在文件。
在我的情况下,我正在开发一个库,它是根据类路径中的配置文件配置的(如果配置文件不存在,则会回退到默认行为)。
我该如何对这门课进行单元测试? 在以下情况下,我需要编写用于评估类的测试:
但我不知道如何配置环境来证明所有这些。并且一个接一个地执行测试。
顺便说一下,我使用Java,并且我在测试类路径上同时拥有JUnit和TestNG。
编辑: 其中一个问题是配置文件驻留在类路径中,因此如果普通的ClassLoader 找到并加载它,只要使用相同的类加载器,它就会返回相同的内容。 我相信使用自定义ClassLoader进行测试非常复杂,需要测试来验证测试!
答案 0 :(得分:1)
您可以使用测试创建的临时文件来模拟班级中的路径。
ConfigurationTest.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());
}
}
Configuration.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);
}
}