私は、vertxバージョン3.3.2とJUnitバージョン4.12のvertxユニットテストを持っています。 次のユニットテストが終了したことがない:Vertxユニットテストが終了しない
@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
});
}
}
テスト自体は正常に動作し、メッセージが正しくSomeVerticle
にハンドラによって処理され、応答が作成され、正しく送信され、送信されます。
しかし、方法doStuff
が実行され、その成功はAsync
オブジェクトに公開されますが、テストは永遠に実行され、終了しません。これは、決して実行されない@After
で注釈付けされたアフター・テスト方法を加えることによって確認することができる。
私は今2時間の間エラーを見つけようとしましたが、問題の正確さがわからないので、私はどんな援助にも満足しています。
[更新] 2分後、テストはタイムアウトして失敗します。
[更新2] 問題を見つけて別の回答に入れました。
どこがブロックされていますか? – Taylor
これはasync.complete()行を実行し、その後は処理が完了しないだけです。 IntelliJでは、テストプロセスは完了しません.Mavenを実行すると、テストプロセスは終了しません。プロセスがハングアップするブロックコードは、少なくとも私のクラスにはありません。 –
テストメソッドを終了していますか? 'vertex.eventBus()。send(...)'の後ろに 'System.out.println'を置いてください。 – Taylor