私のスプリングブートアプリケーションでは、すべてのテストで、@Configuration
クラスの1つだけをテスト構成(特に、@EnableAuthorizationServer
@Configuration
クラス)でオーバーライドします。
スプリングブートテスト機能 および スプリング統合テスト機能 の概要については、これまでのところ簡単な解決策はありません。
@TestConfiguration
:オーバーライドではなく拡張用です。@ContextConfiguration(classes=…)
および@SpringApplicationConfiguration(classes =…)
を使用すると、1つのクラスだけでなく、設定全体をオーバーライドできます。@Configuration
内の内部@Test
クラスは、デフォルトの構成をオーバーライドするために提案されていますが、例は提供されていません。助言がありますか?
内部テスト構成
テストの内部@Configurationの例:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {
@Configuration
static class ContextConfiguration {
@Bean
@Primary //may omit this if this is the only SomeBean defined/visible
public SomeBean someBean () {
return new SomeBean();
}
}
@Autowired
private SomeBean someBean;
@Test
public void testMethod() {
// test
}
}
再利用可能なテスト構成
テスト構成を複数のテストに再利用する場合は、Spring Profile @Profile("test")
を使用してスタンドアロン構成クラスを定義できます。次に、@ActiveProfiles("test")
を使用して、テストクラスでプロファイルをアクティブにします。完全なコードを見る:
@RunWith(SpringRunner.class)
@SpringBootTests
@ActiveProfiles("test")
public class SomeTest {
@Autowired
private SomeBean someBean;
@Test
public void testMethod() {
// test
}
}
@Configuration
@Profile("test")
public class TestConfiguration {
@Bean
@Primary //may omit this if this is the only SomeBean defined/visible
public SomeBean someBean() {
return new SomeBean();
}
}
@ Primary
Bean定義の@Primary
注釈は、複数のBeanが見つかった場合にこのBeanが優先されるようにするためのものです。
スプリングブートプロファイル を使用する必要があります。
@Profile("test")
の注釈を付けます。@Profile("production")
の注釈を付けます。spring.profiles.active=production
。@Profile("test")
を使用して、テストクラスにテストプロファイルを設定します。したがって、アプリケーションの起動時には「プロダクション」クラスを使用し、テストスターの場合は「テスト」クラスを使用します。
内部/ネストされた@Configuration
クラスを使用する場合、アプリケーションのプライマリ設定の代わりに使用されます。
最近、アプリケーションの開発バージョンを作成する必要がありました。これは、コマンドライン引数なしで、すぐにdev
アクティブプロファイルで実行する必要があります。この1つのクラスを新しいエントリとして追加し、プログラムでアクティブプロファイルを設定することで解決しました。
package ...;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.StandardEnvironment;
@Import(OriginalApplication.class)
public class DevelopmentApplication {
public static void main(String[] args) {
SpringApplication application =
new SpringApplication(DevelopmentApplication.class);
ConfigurableEnvironment environment = new StandardEnvironment();
environment.setActiveProfiles("dev");
application.setEnvironment(environment);
application.run(args);
}
}
詳細については、 Arvind RaiによるSpring Boot Profilesの例 を参照してください。