Netty 使用 EmbeddedChannel 进行单元测试

本文介绍了如何在Netty中利用EmbeddedChannel对入站处理器、出站处理器及异常捕获进行单元测试,详细阐述了各个测试环节。
摘要由CSDN通过智能技术生成

Netty 使用 EmbeddedChannel 进行单元测试


对于 Netty 的 ChannelHandler 进行单元测试,Netty 提供了 EmbeddedChannel 嵌入式通道来完成这一过程,主要使用该通道来测试数据的入站出站过程是否合法;
该通道提供以下常用的 API:
writeInbound 写一个入站消息到 EmbeddedChannel。 如果数据能从 EmbeddedChannel 通过 readInbound() 读到,则返回 true;
readInbound 从 EmbeddedChannel 读到入站消息。任何返回遍历整个ChannelPipeline。如果读取还没有准备,则此方法返回 null;
writeOutbound 写一个出站消息到 EmbeddedChannel。 如果数据能从 EmbeddedChannel 通过 readOutbound() 读到,则返回 true;
readOutbound 从 EmbeddedChannel 读到出站消息。任何返回遍历整个ChannelPipeline。如果读取还没有准备,则此方法返回 null;
Finish 如果从入站或者出站中能读到数据,标记 EmbeddedChannel 完成并且返回。这同时会调用 EmbeddedChannel 的关闭方法;
完整 API 见: http://netty.io/4.1/api/io/netty/channel/embedded/EmbeddedChannel.html

以下图示了 ChannelPipeline 使用 EmbeddedChannel 的方法:



入站处理器测试

以下测试一个入站解码器 FixedLengthFrameDecoder;
FixedLengthFrameDecoder
 
//用于进行测试的 Decoder,将读取的帧分隔为固定长度
public class FixedLengthFrameDecoder extends ByteToMessageDecoder {
           
    private final int frameLength;   //帧长度
    public FixedLengthFrameDecoder(int frameLength) {
           
        this.frameLength = frameLength;
    }
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
           
        //帧分割
        while(in.readableBytes() >= frameLength)
            out.add(in.readBytes(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值