統合テストを実行するときに@EnableAsync
を無効にしたいのですが。
@EnableAsync
で注釈が付けられた構成ファイルを、テストパッケージ内の同じ名前のクラスでオーバーライドしようとしましたが、機能しません。
このトピックの内容: 統合テスト中にSpringの@Asyncを無効にすることは可能ですか?
私はそれを見ました:
次のことができます...テスト構成を作成するか、単にタスクエグゼキューターをSyncTaskExecutorでオーバーライドします
しかし、私はその方法がわかりません。
何かアドバイス ?ありがとう
あなたがリンクしたトピックは良い解決策を提供します。
テスト用のSyncTaskExecutor
を作成するには、Springコンテキスト用のテスト構成クラスが実際にあることを確認してください。そのためには、Springのドキュメントを参照してください: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html
この構成クラスで、新しいBeanを追加します。
@Bean
@Primary
public TaskExecutor taskExecutor() {
return new SyncTaskExecutor();
}
それで十分です!
ライブ構成でこのBeanを作成しないように注意してください。
クラスに2つのメソッドを作成することもできます。1つは@Async
アノテーションが含まれ、もう1つはこのアノテーションなしでテストする必要のあるすべてのロジックが含まれ、最初のメソッドが2番目のメソッドを呼び出すようにします。次に、テストで、package-private
の可視性を持つ2番目のメソッドを呼び出します。
例:
@Async
public void methodAsync() {
this.method();
}
void method() {
// Your business logic here!
}
IlyaNovoseltsevによって提供された答えは正しいです。
実用的なソリューションの完全な例を確認したい場合は、Shashaのブログにアクセスしてください: http://todayleave.blogspot.com/2018/02/async-method-junit-test.html そして見てください彼のgitlabプロジェクト: https://gitlab.com/shashaka/async-junit-test-project 。