EmbeddedChannel 单元测试

1 阅读1分钟

前言

EmbeddedChannel 针对ChannelHandler的单元测试而提供

将入站数据或出站数据写入到EmbeddedChannel中,然后检查是否有任何东西到达了ChannelPipeline的尾端

你便可以确定消息是否已经被编码或者被解码过了,以及是否触发了任何ChannelHandler动作

@Test
public void testFramesDecoded() {

ByteBuf buf = Unpooled.buffer();

for (int i = 0; i < 9; i++) {

buf.writeByte(i);

}

ByteBuf input = buf.duplicate();

EmbeddedChannel channel = new EmbeddedChannel(

new FixedLengthFrameDecoder(3));

// write bytes

assertTrue(channel.writeInbound(input.retain()));


assertTrue(channel.finish());

// read messages

ByteBuf read = (ByteBuf) channel.readInbound();

assertEquals(buf.readSlice(3), read);

read.release();

read = (ByteBuf) channel.readInbound();

assertEquals(buf.readSlice(3), read);

read.release();

read = (ByteBuf) channel.readInbound();

assertEquals(buf.readSlice(3), read);

read.release();

assertNull(channel.readInbound());

buf.release();

}