从.properties文件初始化JUnit的常量,该文件从pom.xml文件初始化

时间:2012-09-25 09:10:56

标签: java properties junit initialization constants

*请原谅错综复杂的标题*

背景

/pom.xml

...
<foo.bar>stackoverflow</foo.bar>
...

/src/main/resources/config.properties

...
foo.bar=${foo.bar}
...

Config.java

...

public final static String FOO_BAR;

static {
    try {
        InputStream stream = Config.class.getResourceAsStream("/config.properties");
        Properties properties = new Properties();
        properties.load(stream);
        FOO_BAR = properties.getProperty("foo.bar");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

...

问题

在/ src / main / java中,我在MyClass.java中使用Config.FOO_BAR。如果我想使用带有MyClassTest.java的JUnit在/ src / test / java文件夹中测试MyClass,我如何加载属性以使Config.FOO_BAR常量初始化?

我尝试用foo.bar=stackoverflow在/ src / test / resources中添加一个难以编写的config.properties,但它仍然无法初始化。

1 个答案:

答案 0 :(得分:1)

我可以通过更改pom.xmlConfig.java中的内容来使其发挥作用。

将这些行添加到pom.xml

<project>
    ...
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

并更改Config.java中某些行的顺序:

public class Config {
    public final static String FOO_BAR;

    static {
        InputStream stream = Config.class.getResourceAsStream("/config.properties");
        Properties properties = new Properties();
        try {
            properties.load(stream);
        } catch (IOException e) {
            e.printStackTrace();
            // You will have to take some action here...
        }
        // What if properties was not loaded correctly... You will get null back
        FOO_BAR = properties.getProperty("foo.bar");
    }

    public static void main(String[] args) {
        System.out.format("FOO_BAR = %s", FOO_BAR);
    }
}

如果正在运行Config输出

FOO_BAR = stackoverflow

<强>声明

我不确定您设置这些静态配置值的目的是什么。我刚刚开始工作。


在评论后修改

src/test/java/添加了一个简单的JUnit测试:

package com.stackoverflow;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

/**
 * @author maba, 2012-09-25
 */
public class SimpleTest {

    @Test
    public void testConfigValue() {
        assertEquals("stackoverflow", Config.FOO_BAR);
    }
}

此测试没有问题。