私は、プロパティファイルをロードするServletListener
を検証するためのテストを作成するのに苦労しています。私はそれがうまく動作し、それがclasspath
のファイルを見つけるアプリケーションを実行するときにテストしました。しかし、私はそれのためのテストを作成する方法を知らない。私の考えは、テストプロパティで一時ファイルを作成し、プロパティがSystem properties
に入れられていることを確認することです。しかし、私はいつも正しい場所にファイルを作成することができません。テストから実行するときのgetResourceAsStream( "file")の検索はどこですか?
/target/test-classes
にファイルを作成しようとしましたが、アプリケーションのルートに直接作成しようとしましたが、見つけられませんでした。何か案が?
これは、私がテストしようとしているコードです:
public class PropertyReadingListener implements ServletContextListener {
public static final String PROFILES_PROPERTIES = "profiles.properties";
@Override
public void contextDestroyed(ServletContextEvent event) {
}
@Override
public void contextInitialized(ServletContextEvent event) {
Properties propsFromFile = new Properties();
try {
propsFromFile.load(getClass().getResourceAsStream(PROFILES_PROPERTIES));
} catch (final Exception e) {
log.warn("Unable to find {}, using default profile", PROFILES_PROPERTIES);
}
propsFromFile.stringPropertyNames().stream()
.filter(prop -> System.getProperty(prop) == null)
.forEach(prop -> System.setProperty(prop, propsFromFile.getProperty(prop)));
}
}
感謝。あなたが行うとき
良い単体テストは、協力するクラスの動作を嘲笑して外部依存関係(ファイルなど)を排除します。これは、簡単に実行できるテストを作成できるようにするための良い方法です(つまり、ファイルのデプロイやJARでのアプリケーションのパッケージ化について心配する必要はありません)。 – EJK
mavenでyorプロジェクトをビルドしていますか?次に、テストプロパティファイルをsrc/test/resourcesに配置することができます。これは、テストクラスでのみ使用できます。 getResourceAsStream( "/" + filename)でロードします。 –