2017-07-03 9 views
0

私はリスナーテストを行っています。ここでは、並列スレッドにメッセージを投稿し、すべてが正常に処理された場合はLatchCountDownAndCallRealMethodAnswerで確認します。テストを単独で実行すると完全に動作しますが、他のすべてのテストを一緒に実行すると、カウンタがゼロにならないために失敗しますが、リスナーはメッセージを正常に受信して処理します。誰にもアイデアはありますか?RabbitMQからLatchCountDownAndCallRealMethodAnswerでテストを実行しているときにアサーションエラーが発生しました

私のテストクラス

@RunWith(SpringRunner.class) 
@SpringBootTest 
@RabbitListenerTest 
@ActiveProfiles("test") 
public class EventListenerTest { 

    EventListener eventListener; 

    @Autowired 
    protected RabbitListenerTestHarness harness; 

    @Autowired 
    private EventStoreRepository repository; 

    @SpyBean 
    private DomainEventPublisher publisher; 

    @Before 
    public void setUp() { 
     MockitoAnnotations.initMocks(this); 
     DomainRegister.setDomainEventPublisher(publisher); 
     eventListener = this.harness.getSpy("eventListenerId"); 
    } 

    @Test 
    public void storeEventsListenerTest() throws Exception { 

     LatchCountDownAndCallRealMethodAnswer answer = new LatchCountDownAndCallRealMethodAnswer(1); 
     doAnswer(answer).when(eventListener).storeEvents(any(BalanceReserved.class)); 

     publisher.publish(new BalanceReserved("12233", 150.0, BigDecimal.ZERO), ""); 

     assertTrue(answer.getLatch().await(10, TimeUnit.SECONDS)); 

     verify(eventListener, times(1)).storeEvents(any(BalanceReserved.class)); 
    } 

    @After 
    public void tearDown() { 
     DomainRegister.setDomainEventPublisher(null); 
     reset(eventListener); 
     repository.deleteAll(); 
    } 

} 

エラー

java.lang.AssertionError 

答えて

1

あなたが同じキューを使用して他のテストを持っている場合は、テストのリスナーが停止しているように、各テストのためのアプリケーションコンテキストをシャットダウンする必要があります。デフォルトでは、Spring Testフレームワークは再利用のためにアプリケーションコンテキストをキャッシュします。これにより、他のテストでメッセージを "盗む"ことができます。

@DirtiesContextを追加して、それぞれのテストクラスに@RabbitListenerを使用して、テストフレームワークにコンテキストをシャットダウンするように指示します。

+0

他のテストでイベントエディタを忘れたとしても、これはウサギのこのテストに影響しますか? –

+0

イベントパブリッシャー* –

+0

"忘れる"とは何を意味するのかよくわかりません。しかし、このキューと同じキューから消費する '@RabbitListener'を使用している他のテストがある場合、それらのテストのコンテナ(実行している場合)がこのテストのメッセージを受け取る可能性があります。リスナコンテナを起動するテストケースには必ず@DirtiesContextを追加する必要があります。したがって、テストが終了した後にコンテナが停止します。 –

関連する問題