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です真実ではない私が紛失しているものはありますか?ありがとう。
埋め込みチャネルで何か読み込みがあった場合、writeInbound()がtrueを返すと思いましたか?だから私はこのシナリオのwriteInboundがtrueを返すだろうと思った? – Crystal
私は、何かがパイプラインの最後に当たった場合にのみtrueを返すので、 'readInbound()'で読むことができると言っています。 –