BaseITCaseという基本クラスを拡張する Spring Framework でいくつかの統合テストを実行しています。
このような:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppCacheConfiguration.class, TestConfiguration.class}, loader = SpringBootContextLoader.class)
@Transactional
@WebMvcTest
public abstract class BaseITCase{...}
...
public class UserControllerTest extends BaseITCase {...}
問題は、テストの 1 つに複数の宣言があることです: @MockBean が内部にあり、このテストが実行された瞬間、Spring はコンテキストを再作成し、これに続くテストは間違った Bean を使用することがあります (@ を使用してテスト用に正確に作成されたコンテキストから)モックビーン)。Bean のハッシュコードが異なることを確認しただけで、そのことがわかりました。
@EventListener を使用すると、非常に重要になります。間違ったコンテキスト (既に実行が終了したテスト クラスのコンテキスト) のリスナーが呼び出され、そこに間違った Bean があるためです。
そのための回避策はありますか?
すべての @MockBean 宣言を基本クラスに移動しようとしましたが、新しいコンテキストが作成されないため、正常に機能しました。ただし、基本クラスが重くなりすぎます。また、このテスト用にダーティ コンテキストを作成しようとしましたが、次のテストでは、コンテキストが既に閉じられているというメッセージが表示されて失敗します。