web-dev-qa-db-ja.com

JUnitはテスト用のプロパティファイルをサポートしていますか?

さまざまなステージング環境で実行する必要があるJUnitテストがあります。それぞれの環境には、異なるログイン資格情報や、その環境に固有のその他の側面があります。私の計画は、使用する環境を示すためにVMに環境変数を渡すことです。次に、その変数を使用してプロパティファイルから読み取ります。

JUnitには、.propertiesファイルを読み取るための組み込み機能がありますか?

23
Dave Jensen

Javaには.propertiesファイルを読み取る機能が組み込まれており、JUnitにはテストスイートを実行する前にセットアップコードを実行する機能が組み込まれています。

Java読み取りプロパティ:

Properties p = new Properties();
p.load(new FileReader(new File("config.properties")));

junitスタートアップドキュメント

これら2つを組み合わせると、必要なものが揃うはずです。

27
pstanton

ユニットテストのプロパティにはクラスパス相対ファイルを使用するのが一般的で、ファイルパスを気にせずに実行できます。パスは、開発ボックス、ビルドサーバー、または場所によって異なる場合があります。これは、ant、maven、Eclipseでも変更なしで機能します。

private Properties props = new Properties();

InputStream is = ClassLoader.getSystemResourceAsStream("unittest.properties");
try {
  props.load(is);
}
catch (IOException e) {
 // Handle exception here
}

「unittest.properties」ファイルをクラスパスのルートに配置します。

28
scott m gardner
//
// Load properties to control unit test behaviour.
// Add code in setUp() method or any @Before method (JUnit4).
//
// Corrected previous example: - Properties.load() takes an InputStream type.
//
import Java.io.File;
import Java.io.FileInputStream;        
import Java.util.Properties;

Properties p = new Properties();
p.load(new FileInputStream( new File("unittest.properties")));

// loading properties in XML format        
Properties pXML = new Properties();
pXML.loadFromXML(new FileInputStream( new File("unittest.xml")));
1
edvox1138

この回答は、Mavenを使用するユーザーを支援することを目的としています。

また、ローカルクラスローダーを使用してリソースを閉じることも好みます。

  1. /project/src/test/resources/your.propertiesという名前のテストプロパティファイルを作成します。

  2. IDEを使用する場合、/ src/test/resourcesを「テストリソースルート」としてマークする必要がある場合があります。

  3. コードを追加します。


// inside a YourTestClass test method

try (InputStream is = loadFile("your.properties")) {
    p.load(new InputStreamReader(is));
}

// a helper method; you can put this in a utility class if you use it often

// utility to expose file resource
private static InputStream loadFile(String path) {
    return YourTestClass.class.getClassLoader().getResourceAsStream(path);
}
1
Barett

セットアップメソッドでプロパティファイルを読み取るだけではどうですか?

0
Nate