我有一个我正在运行测试的程序,并且我有一个尝试访问config.properties
文件值的特定方法。它在我第一次调用它时返回null,并且只在第二次调用它后返回一个值,我无法弄清楚原因。
这是我的测试,我在其中调用getHostProp()
方法两次
@Test
public void testHost() throws Exception {
//when
notMocked.getHostProp();
assertEquals("tkthli.com", notMocked.getHostProp());
}
正在测试的类中的方法
public class ConfigProperties {
Properties prop = new Properties();
String propFileName = "config.properties";
public String getHostProp() throws IOException {
String host = prop.getProperty("DAILY-DMS.instances");
if(foundFile()) {
return host;
}
return "Error";
}
}
这是我用来检查是否找到config.properties路径的辅助方法。我不确定它会如何影响这个,但是我正在添加它以防万一有人在那里看到我不会导致问题的东西。
public boolean foundFile() throws IOException {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
prop.load(inputStream);
inputStream.close();
return true;
} else {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath.");
}
}
答案 0 :(得分:1)
您未加载'prop'并试图获取“DAILY-DMS.instances”属性!
第二次使用它的原因是因为你的方法 foundFile()实际上将属性加载到'prop'成员变量并在第一次调用 getHostProp时返回true ()方法。
在第二次通话期间,您已准备好'prop'成员变量并使用加载的值。
希望我回答你的问题
答案 1 :(得分:1)
你能试试这个......
if(foundFile()) {
return prop.getProperty("DAILY-DMS.instances");
}
prop
对象仅在foundFile()
调用后填充,但是您正在读取前一行中的数据。
此外,除非您在运行时更新配置文件,否则我建议您阅读属性文件一并将其存储在某个静态对象或单例中。这样你就可以避免任何进一步的文件读取。只是一个想法..