Ich habe einen Listener-Test, wo ich eine Nachricht in einem parallelen Thread und überprüfen Sie mit LatchCountDownAndCallRealMethodAnswer, ob alle erfolgreich verarbeitet wurden. Wenn Sie den Test alleine ausführen, funktioniert es einwandfrei. Wenn Sie jedoch alle anderen Tests zusammen ausführen, schlägt dies fehl, weil der Zähler nicht auf Null verlassen werden konnte. Der Listener hat die Nachricht jedoch normal empfangen und verarbeitet. Hat jemand irgendwelche Ideen?Assertion Fehler beim Ausführen von Test mit LatchCountDownAndCallRealMethodAnswer von RabbitMQ
My Test Klasse
@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();
}
}
Fehler
java.lang.AssertionError
Auch wenn ich den Event-Editor in den anderen Tests vergesse, wird dies den Hasen diesen Test beeinflussen? –
Event-Publisher * –
Ich bin mir nicht sicher, was Sie mit "vergessen" meinen. Wenn Sie jedoch andere Tests verwenden, bei denen Sie einen '@ RabbitListener' verwenden, der aus der gleichen Warteschlange wie dieser verwendet wird, erhalten (wahrscheinlich) die Container dieser Tests (wahrscheinlich) die Nachricht dieses Tests. Sie sollten immer '@ DirtiesContext' zu jedem Testfall hinzufügen, der einen Listener-Container startet, sodass der Container nach dem Ende des Tests gestoppt wird. –