Netty 4.1.6上的单元测试

时间:2016-11-25 12:06:44

标签: java junit netty

我已经使用由服务器和多个客户端组成的Netty 4.1.6开发了一款纸牌游戏。

我现在希望创建一些单元测试(应该在编写项目时创建)。其中一些包括:测试用户输入,测试服务器输出等。

我读过我可以创建一个EmbeddedChannel来模仿它的行为:

 public void testNettyStringDecoder() {
    EmbeddedChannel channel = new EmbeddedChannel(new StringDecoder(Charset.defaultCharset()));
    channel.writeInbound(Unpooled.wrappedBuffer(new byte[]{(byte)0xE2,(byte)0x98,(byte)0xA2}));
    String myObject = channel.readInbound();

    assertEquals("☢", myObject);
    System.out.println("[NETTY] Tested our StringDecoder's ability to decode unicode." +
            " Expected ☢ got " + myObject);
}

但我现在想模拟一个ChannelHandlerContext以测试假客户端输入。我怎么能用JUnit

来做到这一点

1 个答案:

答案 0 :(得分:0)

EmbeddedChannel可以很好地处理编解码器和管道,您无需模拟ChannelHandlerContext。如果将处理程序放在通道中,则可以使用单元测试验证业务逻辑,并且可以确保执行处理程序逻辑的所有必要基础结构都已到位。

由于每个嵌入式通道代表一个单独的连接,因此您可以拥有任意数量的通道。如果您的通道处理程序是可共享的,那么您将能够验证多个通道打开时的行为方式。

如果嵌入式通道不够,您可以使用LocalAddress并引导全功能服务器/客户端,仅用于in-vm测试。