2

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

背景

/pom.xml

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

/src/main/resources/config.properties

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

配置文件

...

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 中,我Config.FOO_BAR在 MyClass.java 中使用。如果我想MyClass在 /src/test/java 文件夹中使用带有 MyClassTest.java 的 JUnit 进行测试,如何加载属性以便Config.FOO_BAR初始化常量?

我试图在 /src/test/resources 中添加一个几乎没有编写的 config.properties foo.bar=stackoverflow,但它仍然无法初始化。

4

1 回答 1

1

pom.xml我可以通过更改 your和 your中的一些来使其工作Config.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

免责声明

我不确定您设置这些静态配置值的目的是什么。我只是让它工作。


评论后编辑

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

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);
    }
}

这个测试没有问题。

于 2012-09-25T09:35:37.937 回答