我已经使用由服务器和多个客户端组成的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
?
答案 0 :(得分:0)
EmbeddedChannel可以很好地处理编解码器和管道,您无需模拟ChannelHandlerContext
。如果将处理程序放在通道中,则可以使用单元测试验证业务逻辑,并且可以确保执行处理程序逻辑的所有必要基础结构都已到位。
由于每个嵌入式通道代表一个单独的连接,因此您可以拥有任意数量的通道。如果您的通道处理程序是可共享的,那么您将能够验证多个通道打开时的行为方式。
如果嵌入式通道不够,您可以使用LocalAddress
并引导全功能服务器/客户端,仅用于in-vm测试。