我正在构建一个自动运行大约一百个测试的Java程序。程序本身处于生产的最后阶段,我的老板希望我取出所有硬编码变量并将它们存储在.properties文件中。现在我有两个java文件Logic.java和Tests.java,以及一个属性文件xxx.properties。但是,当我运行代码(Tests.java中的JUnit测试)时,似乎永远不会加载属性。相关代码如下:
在Logic.java中
Properties properties = new Properties();
String val1;
String val2;
...
String last_val;
public void importProperties() {
try {
properties.load(new FileInputStream("xxx.properties"));
val1 = properties.getProperty("val1-property-name");
...
lastVal = properties.getProperty("lastVal-property-name");
} catch (Exception e) {
e.printStackTrace();
}
}
public void test() {
importProperties();
//Testing code follows, several method calls referencing val1, val2, etc
}
在Tests.java中
Logic logic = new Logic();
@Before
public void before() {
logic.importProperties();
}
@Test
public void test1() {
logic.testMethod();
}
//More tests
}
我应该在@Before方法中导入属性并在Logic.java中设置字符串val,因为我没有创建一个新的Logic实例(或者我相信),但当我试图找到它的值时字符串(将字符串值写入日志文件),所述文件中没有文本。我知道日志文件写入的事实,因此字符串不会被设置为它们的属性值。我的属性文件也写得正确,如有必要,我可以提供更多信息。谢谢!
编辑:因此,经过一系列的故障排除之后,看起来好像正在读取属性文件,因为properties.keys()调用会返回所有键。但是,它不是将字符串设置为键值。仍在进行故障排除,但任何想法都会有所帮助
答案 0 :(得分:1)
替换
properties.load(new FileInputStream("xxx.properties"));
带
properties.load(new InputStreamReader(Logic.class.getResource("xxx.properties").openStream(), "UTF8"));
&安培;再次测试。我希望它能解决你的问题
答案 1 :(得分:0)
我认为您的属性文件未找到,这就是整个问题。
尝试使用下面的代码行
,而不是创建新的FileInputStreamproperties.load(this.getClass().getResourceAsStream("xxx.properties"));