Junit テストでデフォルトの Spring-Boot application.properties 設定を上書きする 質問する

Junit テストでデフォルトの Spring-Boot application.properties 設定を上書きする 質問する

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.propertiesJUnit テストの設定を上書きする簡単な解決策があるはずです。test.properties

ベストアンサー1

@TestPropertySourceの値をオーバーライドするには を使用できますapplication.properties。javadoc から引用:

テストプロパティソースは、システムおよびアプリケーションプロパティソースで定義されたプロパティを選択的にオーバーライドするために使用できます。

例えば:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ExampleApplication.class)
@TestPropertySource(locations="classpath:test.properties")
public class ExampleApplicationTests {

}

おすすめ記事