web-dev-qa-db-ja.com

Spring Bootは、統合テストのために@EnableAsyncを無効にします

統合テストを実行するときに@EnableAsyncを無効にしたいのですが。

@EnableAsyncで注釈が付けられた構成ファイルを、テストパッケージ内の同じ名前のクラスでオーバーライドしようとしましたが、機能しません。

このトピックの内容: 統合テスト中にSpringの@Asyncを無効にすることは可能ですか?

私はそれを見ました:

次のことができます...テスト構成を作成するか、単にタスクエグゼキューターをSyncTaskExecutorでオーバーライドします

しかし、私はその方法がわかりません。

何かアドバイス ?ありがとう

9
psv

あなたがリンクしたトピックは良い解決策を提供します。

テスト用の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を作成しないように注意してください。

16

クラスに2つのメソッドを作成することもできます。1つは@Asyncアノテーションが含まれ、もう1つはこのアノテーションなしでテストする必要のあるすべてのロジックが含まれ、最初のメソッドが2番目のメソッドを呼び出すようにします。次に、テストで、package-privateの可視性を持つ2番目のメソッドを呼び出します。

例:

@Async
public void methodAsync() {
    this.method();
}

void method() {
   // Your business logic here!
}
0
Felipe Moraes

IlyaNovoseltsevによって提供された答えは正しいです。

実用的なソリューションの完全な例を確認したい場合は、Shashaのブログにアクセスしてください: http://todayleave.blogspot.com/2018/02/async-method-junit-test.html そして見てください彼のgitlabプロジェクト: https://gitlab.com/shashaka/async-junit-test-project

0
ppiatkowski