如何对读取属性文件的类进行单元测试

时间:2016-04-05 01:25:52

标签: java testing junit properties

我正在尝试为读取属性文件的类编写Junit测试用例。这是我的代码:

public class PropertiesRetreiver {

    private String foo = "";
    private String foo1 = "";
    private static String PROPERTIES_PATH ="data.properties";

    public PropertiesRetreiver() throws IOException {

        InputStream in = this.getClass().getResourceAsStream(PROPERTIES_PATH);
        Properties properties = new Properties();
        properties.load(in);

        foo = properties.getProperty("foo");
        foo1 = properties.getProperty("foo1");
    }

    public String getfoo() {
        return foo;
    }

    public String getfoo1() {
        return foo1;
    }
}

任何人都可以给我一些关于我可以模拟和测试的测试用例场景的想法吗?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

你的类实际上做了两件事:它加载一个属性文件,并存储一些特定的属性。

出于测试目的,您可以(应该?)一次只关注一个方面,或者将这两个角色分成不同的类(例如,PropertiesLoader和PropertyStore),或者至少允许在您的类中进行一些注入。

如果要正确测试类,从构造函数中删除不必要的代码总是一个好主意:)

例如:

public class PropertiesRetreiver {

    private String foo = "";
    private String foo1 = "";
    private static String PROPERTIES_PATH ="data.properties";

    public PropertiesRetreiver() {
    }

    public void loadProperties() throws IOException {
        loadProperties(PROPERTIES_PATH);
    }
    public void loadProperties(String path) throws IOException {
        InputStream in = this.getClass().getResourceAsStream(path);
        Properties properties = new Properties();
        properties.load(in);
        loadProperties(properties);
    }
    public void loadProperties(Properties properties) {
        foo = properties.getProperty("foo");
        foo1 = properties.getProperty("foo1");
    }

    public String getfoo() { return foo; }    
    public String getfoo1() { return foo1; }
}

此代码将更容易测试,因为您可以专注于属性加载/ retreival的每个方面