Ich habe einen vertx-Unit-Test mit vertx Version 3.3.2 und JUnit Version 4.12. Der folgende Unit-Test nie beendet:Vertex-Unit-Test endet nie
@RunWith(VertxUnitRunner.class)
public class SomeVerticleTest {
private Vertx vertx;
@Before
public void before(TestContext context) {
vertx = Vertx.vertx();
vertx.deployVerticle(SomeVerticle.class.getName(), r -> context.asyncAssertSuccess()); // problem is in this line, see answer for solution!
}
@Test
public void doStuff(TestContext context) {
String encodedMessage = Json.encode("myMessage");
Async async = context.async();
vertx.eventBus().send("someVerticle", encodedMessage, asyncResult -> {
// some context.asserts on the message reply
async.complete(); // this line is executed, I can see it in the debugger
});
}
}
Der Test selbst fein läuft, wird die Nachricht, korrekt verarbeitet vom Handler in SomeVerticle
und die Antwort erstellt wird gesendet und gesendet korrekt.
Aber: Obwohl die Methode doStuff
ausgeführt wird und ihr Erfolg auf das Async
Objekt veröffentlicht wird, läuft der Test einfach für immer, es endet nie. Dies kann durch Hinzufügen einer Nach-Test-Methode verifiziert werden, die mit @After
annotiert ist und niemals ausgeführt wird.
Ich habe versucht, den Fehler jetzt für zwei Stunden zu finden, aber ich weiß einfach nicht, was genau das Problem sein könnte, also würde ich mich über jede Hilfe freuen.
[Update] Nach zwei Minuten schlägt der Test mit einer Zeitüberschreitung fehl.
[Update 2] Ich fand das Problem und legte es in eine separate Antwort.
Wo blockiert es? – Taylor
Es führt die async.complete() Zeile aus und danach wird der Prozess nie beendet. In IntelliJ endet der Testprozess nie, wenn er durch maven läuft, wird er auch nie beendet. Es gibt keinen blockierenden Code - zumindest nicht in meinen Klassen - in dem der Prozess hängt. –
Verlässt es Ihre Testmethode? Lege nach 'vertx.eventBus() '' System.out.println' ein. Send (...) 'schau, ob es jemals da ist. – Taylor