最近用了一段时间的Netty,现构建了一个编码器/解码器管道,以测试编码器和解码器在没有发送真实的消息时是否在正常工作。
方便的是,Netty 有个 EmbeddedChannel,使测试变得非常轻松。
假设我们有一条消息“ Foo”,我们想通过网络发送。它仅包含一个整数值,因此我们将其发送并在另一侧重建“ Foo”。 我们可以编写以下编码器来执行此操作:
public static class MessageEncoder extends MessageToMessageEncoder<Foo> { @Override protected void encode( ChannelHandlerContext ctx, Foo msg, List<Object> out ) throws Exception { ByteBuf buf = ctx.alloc().buffer(); buf.writeInt( msg.value() ); out.add( buf ); } } public static class Foo { private Integer value; public Foo(Integer value) { this.value = value; } public int value() { return value; } }
因此,我们要做的就是从“ Foo”中拿到“ value”字段并将其放入列表,该列表会向下传递。
编写一个测试,该测试模拟发送“ Foo”消息并使用空的解码器尝试处理该消息:
@Test public void shouldEncodeAndDecodeVot