2017-09-12 3 views
0

私は、Nettyで簡単に何かをテストして、EmbeddedChannelの仕組みを理解しようとしています。私のハンドラは、次のようになります。私のテストがどのように見えるtest channel NetHandlerでのハンドラ

@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バイトを書き込もうとしてんだけど、testはfalseです真実ではない私が紛失しているものはありますか?ありがとう。

答えて

1

writeInbound(...)は、メッセージがパイプラインの最後に当たった場合にのみtrueを返すためです。確認したい項目を確認するには、writeInbound(...)に電話してreadOutbound()を使用し、nullを返さないようにします。またchannel.finish()trueを返す必要があります。

+0

埋め込みチャネルで何か読み込みがあった場合、writeInbound()がtrueを返すと思いましたか?だから私はこのシナリオのwriteInboundがtrueを返すだろうと思った? – Crystal

+0

私は、何かがパイプラインの最後に当たった場合にのみtrueを返すので、 'readInbound()'で読むことができると言っています。 –

関連する問題