1. ホーム

[解決済み】Junit TestでSpring-Bootのデフォルトのapplication.propertiesの設定を上書きする。

2022-04-02 20:24:53

質問

Spring-Bootアプリケーションで、デフォルトのプロパティが application.properties ファイル(src/main/resources/application.properties)をクラスパスで指定します。

JUnitテストのいくつかのデフォルト設定を test.properties ファイル (src/test/resources/test.properties) を使用します。

私は通常、Junit Testsのために専用のConfig Classを用意しています。

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 {

}

を使うのはどうかと最初に思いました。 @PropertySource("classpath:test.properties") をTestConfigクラスで使用すればよいのですが、これらのプロパティはapplication.propertiesの設定を上書きしません(Spring-Boot Reference Doc -を参照)。 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 見落としていたようです。

解決方法は?

を使用することができます。 @TestPropertySource の値をオーバーライドするために application.properties . そのjavadocから。

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

例えば

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

}