2017-10-07 6 views
0

私はVertx.io(バージョン3.4.2)で遊んでいます。いくつかのコードを入れて、今私はそれをテストしたいので、私は単体テストのカップルを書く。私は彼らに分けて、両方の完全良くし、各テストを実行しますが、私はMVNクリーンなテストを行う際に、それらの両方がこのメッセージで失敗する場合:Vertx.ioアプリケーションのユニットテスト

java.net.BindException: Address already in use: bind 
at sun.nio.ch.Net.bind0(Native Method) 
at sun.nio.ch.Net.bind(Unknown Source) 
at sun.nio.ch.Net.bind(Unknown Source) 
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source) 
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128) 
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:554) 
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1258) 
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:502) 
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:487) 
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:980) 
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:250) 
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:365) 
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) 
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasksFrom(SingleThreadEventExecutor.java:379) 
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) 
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:436) 
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) 
at java.lang.Thread.run(Unknown Source) 

その垂直方向の、テストcompletition後にシャットダウンしないようです。

@RunWith(VertxUnitRunner.class) 
public class SomeApiTest { 

private ObjectMapper objectMapper; 
private Vertx vertx; 
private Integer port; 
private static Logger log; 

@BeforeClass 
public static void initTests() { 
log = Logger.getLogger("SomeApiTest"); 
} 

@Before 
public void setUp(TestContext context) { 
log.info("start up test."); 
vertx = Vertx.vertx(); 
objectMapper = new ObjectMapper(); 
port = 8080; 
DeploymentOptions options = new DeploymentOptions(); 
options.setConfig(new JsonObject()); 
options.getConfig().put("api.port", port); 
vertx.deployVerticle("SomeApi", options, context.asyncAssertSuccess()); 
} 

@After 
public void tearDown(TestContext context) { 
log.info("shutting down test."); 
vertx.close(h -> { 
    if (h.failed()) { 
    log.error(h.cause()); 
    } 
}); 
} 

@Test 
public void whenRequestHitsVerticleItReturnsRecipes(TestContext context) throws Exception { 
final Async async = context.async(); 
List<Integer> votes = new ArrayList<>(); 
votes.add(new Integer(6)); 
votes.add(new Integer(4)); 
votes.add(new Integer(8)); 
vertx.eventBus().consumer("persistence", h -> { 
    h.reply(Json.encode(votes)); 
}); 
vertx.createHttpClient().getNow(port, "localhost", "/votes?qty=3", response -> { 
    response.handler(body -> { 
    Integer[] xvotes; 
    try { 
     xvotes = objectMapper.readValue(body.toString(), Integer[].class); 
     int expected = 3; 
     int actual = xvotes.length; 
     Assert.assertEquals(expected, actual); 
     async.complete(); 
    } catch (Exception e) { 
     log.error(e); 
     Assert.fail(e.getMessage()); 
    } 
    }); 
}); 
} 

@Test 
public void fiveDishesRequestAgainsTenRecipesApi(TestContext context) throws Exception { 
    final Async async = context.async(); 
    List<Integer> votes = new ArrayList<>(); 
    votes.add(new Integer(3)); 
    votes.add(new Integer(4)); 
    votes.add(new Integer(7)); 
    votes.add(new Integer(7)); 
    votes.add(new Integer(6)); 
    vertx.eventBus().consumer("persistence", h -> { 
    h.reply(Json.encode(votes)); 
    }); 
    vertx.createHttpClient().getNow(port, "localhost", "/votes?qty=5", response -> { 
    response.handler(body -> { 
    Integer[] xvotes; 
    try { 
     xvotes = objectMapper.readValue(body.toString(), Integer[].class); 
     int expected = 5; 
     int actual = xvotes.length; 
     Assert.assertEquals(expected, actual); 
     async.complete(); 
    } catch (Exception e) { 
     log.error(e); 
     Assert.fail(e.getMessage()); 
    } 
    }); 
    }); 
    } 
} 

テストは簡単ですが、その目的はVertxでユニットテストを行う方法です。テスト終了後、各頂点が展開されなくなることを期待しています。私は何が欠けていますか?

答えて

1

vertxが閉じられるまでお待ちください。ここに例があります:

@After 
public void tearDown(TestContext context) { 
log.info("shutting down test."); 
Async async = context.async(); 
vertx.close(h -> { 
    if (h.failed()) { 
     log.error(h.cause()); 
    } 
    async.success(); 
}); 
} 
関連する問題