*请原谅错综复杂的标题*
背景
/pom.xml
...
<foo.bar>stackoverflow</foo.bar>
...
/src/main/resources/config.properties
...
foo.bar=${foo.bar}
...
Config.java
...
public final static String FOO_BAR;
static {
try {
InputStream stream = Config.class.getResourceAsStream("/config.properties");
Properties properties = new Properties();
properties.load(stream);
FOO_BAR = properties.getProperty("foo.bar");
} catch (IOException e) {
e.printStackTrace();
}
}
...
问题
在/ src / main / java中,我在MyClass.java中使用Config.FOO_BAR
。如果我想使用带有MyClassTest.java的JUnit在/ src / test / java文件夹中测试MyClass
,我如何加载属性以使Config.FOO_BAR
常量初始化?
我尝试用foo.bar=stackoverflow
在/ src / test / resources中添加一个难以编写的config.properties,但它仍然无法初始化。
答案 0 :(得分:1)
我可以通过更改pom.xml
和Config.java
中的内容来使其发挥作用。
将这些行添加到pom.xml
:
<project>
...
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
并更改Config.java
中某些行的顺序:
public class Config {
public final static String FOO_BAR;
static {
InputStream stream = Config.class.getResourceAsStream("/config.properties");
Properties properties = new Properties();
try {
properties.load(stream);
} catch (IOException e) {
e.printStackTrace();
// You will have to take some action here...
}
// What if properties was not loaded correctly... You will get null back
FOO_BAR = properties.getProperty("foo.bar");
}
public static void main(String[] args) {
System.out.format("FOO_BAR = %s", FOO_BAR);
}
}
如果正在运行Config
输出
FOO_BAR = stackoverflow
<强>声明强>
我不确定您设置这些静态配置值的目的是什么。我刚刚开始工作。
在评论后修改
为src/test/java/
添加了一个简单的JUnit测试:
package com.stackoverflow;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author maba, 2012-09-25
*/
public class SimpleTest {
@Test
public void testConfigValue() {
assertEquals("stackoverflow", Config.FOO_BAR);
}
}
此测试没有问题。