java - 对文件存在的不同行为进行单元测试

标签 java unit-testing tdd testng

在某些情况下,软件会根据某些环境条件而表现不同,例如文件是否存在于某个地方。

就我而言,我正在开发一个库,它是根据类路径中的配置文件进行配置的(如果配置文件不存在,则返回到默认行为)。

我该如何对这个类进行单元测试? 我需要编写测试来评估以下情况下的类:

  • 类路径上不存在该文件
  • 内容为 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/

相关文章:

python - 单元测试遍历循环的方法

unit-testing - 具有多个复杂私有(private)方法的单个公共(public)方法的 TDD 过程

使用模拟和屏幕截图进行 iOS UI 测试

c++ - 对不适合作为新类提取的私有(private)方法进行单元测试的好方法是什么?

tdd - 应用测试

java - 需要帮助-在sql Developer3.0中查询将图像插入表中

java - JPA 将 native 查询结果映射到非实体 DTO

java - Java中高效的方法参数

java - tomcat中的多个库新旧版本

ruby-on-rails - rails 测试困惑