2

※ややこしいタイトルお許しください※

バックグラウンド

/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 ではConfig.FOO_BAR、MyClass.java で使用しています。MyClassJUnit と MyClassTest.java を使用して /src/test/java フォルダーでテストしたい場合、Config.FOO_BAR定数が初期化されるようにプロパティをロードするにはどうすればよいですか?

/src/test/resources 内にほとんど書かれていない config.properties を で追加しようとしましたfoo.bar=stackoverflowが、まだ初期化できません。

4

1 に答える 1

1

私はあなたpom.xmlとあなたのいくつかを変更することによってそれを機能させることができます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 に答える