application.properties
クラスパス内のファイル (src/main/resources/application.properties)にデフォルトのプロパティが設定されている Spring-Boot アプリケーションがあります。
test.properties
ファイル (src/test/resources/test.properties)で宣言されたプロパティを使用して、JUnit テストのいくつかのデフォルト設定を上書きしたいと思います。
私は通常、Junitテスト専用のConfigクラスを持っています。例えば
package foo.bar.test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
}
最初はTestConfigクラスで使用すればうまくいくだろうと考えました@PropertySource("classpath:test.properties")
が、これらのプロパティはapplication.properties設定を上書きしません(Spring-Bootリファレンスドキュメントを参照 -23. 外部化された構成)。
次に、テストを呼び出すときに使用してみました-Dspring.config.location=classpath:test.properties
。成功しましたが、このシステムプロパティをテスト実行ごとに設定したくありません。そのため、コードに次のように記述しました。
@Configuration
@Import(CoreConfig.class)
@EnableAutoConfiguration
public class TestConfig {
static {
System.setProperty("spring.config.location", "classpath:test.properties");
}
}
残念ながら、これもまた成功しませんでした。
私が見落としていたapplication.properties
JUnit テストの設定を上書きする簡単な解決策があるはずです。test.properties
ベストアンサー1
@TestPropertySource
の値をオーバーライドするには を使用できますapplication.properties
。javadoc から引用:
テストプロパティソースは、システムおよびアプリケーションプロパティソースで定義されたプロパティを選択的にオーバーライドするために使用できます。
例えば:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {
}