1

我正在构建一个 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 中的字符串 vals,因为我没有创建 Logic 的新实例(或者我相信),但是当我尝试查找字符串的值时(将字符串值写入日志文件),所述文件中没有文本。我知道日志文件写入有效,因此没有将字符串设置为其属性值。我的属性文件也正确写入,如有必要,我可以提供更多信息。谢谢!

编辑:因此,经过一系列故障排除后,看起来好像确实正在读取属性文件,因为 properties.keys() 调用返回了所有键。但是,它没有将字符串设置为键值。仍在进行故障排除,但任何想法都会有所帮助

4

2 回答 2

1

代替

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

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

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

于 2012-05-11T18:39:01.653 回答
0

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

而不是创建一个新的 FileInputStream 尝试使用下面的代码行

properties.load(this.getClass().getResourceAsStream("xxx.properties"));
于 2012-05-11T18:48:16.420 回答