在 netty 中测试 channelHandlers
Testing channelHandlers in netty
我正在尝试在 Netty 中测试一些超级简单的东西,以弄清楚 EmbeddedChannel 是如何工作的。我的处理程序如下所示:
@Component
@Sharable
public class VersionServerHandler extends ChannelInboundHandlerAdapter {
private VersionService versionService;
@Autowired
public VersionServerHandler(VersionService versionService) {
this.versionService = versionService;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
boolean isSupported = versionService.isVersionSupported((VersionRequest) msg.getVersion());
// more logic
ctx.writeAndFlush(msg);
}
我的测试看起来像:
@Mock
private VersionService versionService;
@Test
public void testChannelRead() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(new VersionServerHandler(versionService);
ByteBuf buf = Unpooled.buffer();
for (int i = 0; i < 9; i++) {
buf.writeByte(i);
}
ByteBuf dup = buf.duplicate();
boolean test = embeddedChannel.writeInbound(dup.retain());
// test is false
我只是想用 VersionServerHandler 向 EmbeddedChannel 写入字节,就像在 netty 示例中一样,但是 test
是假的而不是真。有什么我想念的吗?
这是因为 writeInbound(...)
只有在消息到达管道末端时才会 return true
。要检查您想要检查的内容,您可以调用 writeInbound(...)
然后使用 readOutbound()
并检查它不是 return null
。另外 channel.finish()
应该 return true
.
我正在尝试在 Netty 中测试一些超级简单的东西,以弄清楚 EmbeddedChannel 是如何工作的。我的处理程序如下所示:
@Component
@Sharable
public class VersionServerHandler extends ChannelInboundHandlerAdapter {
private VersionService versionService;
@Autowired
public VersionServerHandler(VersionService versionService) {
this.versionService = versionService;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
boolean isSupported = versionService.isVersionSupported((VersionRequest) msg.getVersion());
// more logic
ctx.writeAndFlush(msg);
}
我的测试看起来像:
@Mock
private VersionService versionService;
@Test
public void testChannelRead() {
EmbeddedChannel embeddedChannel = new EmbeddedChannel(new VersionServerHandler(versionService);
ByteBuf buf = Unpooled.buffer();
for (int i = 0; i < 9; i++) {
buf.writeByte(i);
}
ByteBuf dup = buf.duplicate();
boolean test = embeddedChannel.writeInbound(dup.retain());
// test is false
我只是想用 VersionServerHandler 向 EmbeddedChannel 写入字节,就像在 netty 示例中一样,但是 test
是假的而不是真。有什么我想念的吗?
这是因为 writeInbound(...)
只有在消息到达管道末端时才会 return true
。要检查您想要检查的内容,您可以调用 writeInbound(...)
然后使用 readOutbound()
并检查它不是 return null
。另外 channel.finish()
应该 return true
.