Config.properties仅在调用两次时返回值

时间:2015-06-10 19:22:46

标签: java testing junit

我有一个我正在运行测试的程序,并且我有一个尝试访问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.");

    }
}

2 个答案:

答案 0 :(得分:1)

您未加载'prop'并试图获取“DAILY-DMS.instances”属性!
第二次使用它的原因是因为你的方法 foundFile()实际上将属性加载到'prop'成员变量并在第一次调用 getHostProp时返回true ()方法。

在第二次通话期间,您已准备好'prop'成员变量并使用加载的值。

希望我回答你的问题

答案 1 :(得分:1)

你能试试这个......

if(foundFile()) {
   return prop.getProperty("DAILY-DMS.instances");
}

prop对象仅在foundFile()调用后填充,但是您正在读取前一行中的数据。

此外,除非您在运行时更新配置文件,否则我建议您阅读属性文件一并将其存储在某个静态对象或单例中。这样你就可以避免任何进一步的文件读取。只是一个想法..