Часть поведения реализации ChannelHandler
заключается в том, что она должна отправлять ответ после получения сообщения. Однако переданный ChannelHandlerContext
, похоже, создает внутренний экземпляр Channel
, который не равен экземпляру EmbeddedChannel
, используемому в модульном тесте. Таким образом, невозможно проверить извне, что ответ фактически был записан в канал.
Вот код, проясняющий проблему:
public class EchoHandler extends SimpleChannelInboundHandler<Object>
{
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception
{
ctx.channel().writeAndFlush(msg);
}
}
@Test
public void aTest() throws Exception
{
EchoHandler handler = new EchoHandler();
EmbeddedChannel channel = spy(new EmbeddedChannel(handler));
Object anObject = new Object();
channel.writeInbound(anObject);
verify(channel, times(1)).writeAndFlush(eq(anObject)); // will fail
}