无法从属性文件中读取

时间:2012-05-11 18:30:11

标签: java junit

我正在构建一个自动运行大约一百个测试的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()调用会返回所有键。但是,它不是将字符串设置为键值。仍在进行故障排除,但任何想法都会有所帮助

2 个答案:

答案 0 :(得分:1)

替换

properties.load(new FileInputStream("xxx.properties"));

properties.load(new InputStreamReader(Logic.class.getResource("xxx.properties").openStream(), "UTF8"));

&安培;再次测试。我希望它能解决你的问题

答案 1 :(得分:0)

我认为您的属性文件未找到,这就是整个问题。

尝试使用下面的代码行

,而不是创建新的FileInputStream
properties.load(this.getClass().getResourceAsStream("xxx.properties"));