JUnit是否支持测试的属性文件?

时间:2009-10-12 23:53:58

标签: java junit

我有需要在各种不同的临时环境中运行的JUnit测试。每个环境都具有不同的登录凭据或特定于该环境的其他方面。我的计划是将环境变量传递到VM中以指示要使用的环境。然后使用该var从属性文件中读取。

JUnit是否具有读取.properties文件的任何内置功能?

6 个答案:

答案 0 :(得分:27)

java内置了读取.properties文件的功能,JUnit内置了在执行测试套件之前运行设置代码的功能。

java阅读属性:

Properties p = new Properties();
p.load(new FileReader(new File("config.properties")));

junit startup documentation

把这两个放在一起,你应该得到你需要的东西。

答案 1 :(得分:26)

通常首选使用类路径相关文件作为单元测试属性,这样它们就可以运行而不必担心文件路径。开发框,构建服务器或任何地方的路径可能不同。这也可以在没有变化的情况下从ant,maven,eclipse中发挥作用。

private Properties props = new Properties();

InputStream is = ClassLoader.getSystemResourceAsStream("unittest.properties");
try {
  props.load(is);
}
catch (IOException e) {
 // Handle exception here
}

将“unittest.properties”文件放在类路径的根目录下。

答案 2 :(得分:1)

//
// Load properties to control unit test behaviour.
// Add code in setUp() method or any @Before method (JUnit4).
//
// Corrected previous example: - Properties.load() takes an InputStream type.
//
import java.io.File;
import java.io.FileInputStream;        
import java.util.Properties;

Properties p = new Properties();
p.load(new FileInputStream( new File("unittest.properties")));

// loading properties in XML format        
Properties pXML = new Properties();
pXML.loadFromXML(new FileInputStream( new File("unittest.xml")));

答案 3 :(得分:1)

此答案旨在帮助那些使用Maven的人。

我也更喜欢使用本地类加载器并关闭我的资源。

  1. 创建测试属性文件,名为/project/src/test/resources/your.properties

  2. 如果使用IDE,则可能需要将/ src / test / resources标记为“测试资源根目录”

  3. 添加一些代码:


// inside a YourTestClass test method

try (InputStream is = loadFile("your.properties")) {
    p.load(new InputStreamReader(is));
}

// a helper method; you can put this in a utility class if you use it often

// utility to expose file resource
private static InputStream loadFile(String path) {
    return YourTestClass.class.getClassLoader().getResourceAsStream(path);
}

答案 4 :(得分:0)

您是否只能在设置方法中阅读属性文件?

答案 5 :(得分:0)

如果目的是将 .properties 文件加载到系统属性中,那么系统存根 (https://github.com/webcompere/system-stubs) 可以提供帮助:

SystemProperties 对象可以用作 JUnit 4 规则以在测试方法中应用它,也可以用作 JUnit 5 插件的一部分,允许从属性文件设置属性:

SystemProperties props = new SystemProperties()
    .set(fromFile("src/test/resources/test.properties"));

然后需要激活 SystemProperties 对象。这可以通过在 JUnit 5 中用 @SystemStub 标记它,或者在 JUnit4 中使用它的 SystemPropertiesRule 子类,或者通过在 SystemProperties execute 方法中执行测试代码来实现。