Ich verwende eine einfache Falle für Ereignisse in der Testumgebung, um Ereignisse zu sammeln und zu überprüfen:
Code: Select all
@Singleton
public class MessageListenerTestHelper {
private ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue();
@Async
@EventListener
public void onEvent(Object event) {
queue.add(event);
}
public Queue getQueue() {
return queue;
}
public Future getEventFromQueue(Class eventClass) {
CompletableFuture future = new CompletableFuture();
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
Optional eventOpt = queue.stream()
.filter(eventClass::isInstance)
.findAny();
if (eventOpt.isPresent()) {
future.complete((T) eventOpt.get());
}
}, 100, 100, TimeUnit.MILLISECONDS);
return future;
}
}
Ich werde die Verwendung der @MicronautTest-Annotation ablehnen und Mocks manuell einfügen. Aber vielleicht gibt es noch eine andere Wahl?
Mobile version