2016-11-04 4 views
1

Я пишу модульное тестирование для моего приложения с помощью EmbeddedChannel:EmbeddedChannel и channelActive

@Test 
public void sendMessage() { 
    CurrentMessage currentMessage = new CurrentMessage(); 
    currentMessage.setCommand(CommandEnum.CURRENT_MEASUREMENT_REQUEST); 

    EmbeddedChannel channel = new EmbeddedChannel(); 
    channel.pipeline().addLast(new LoggingHandler(LogLevel.TRACE)); 
    channel.pipeline().addLast(new ClientEventHandler(currentMessage)); 
    assertTrue(channel.isActive()); 
} 

Но мой channelActive из ClientEventHandler это не вызывается:

@Override 
public void channelActive(ChannelHandlerContext ctx) throws Exception { 
    IConverter converter = CommandUtil.commands.get(message.getCommand().getHexValue()); 

    byte[] byteMessage = converter.encode(message); 

    logger.info("Sending byte array message: " + byteMessage); 

    ctx.writeAndFlush(Unpooled.copiedBuffer(byteMessage)); 
} 

ли EmbeddedChannel поддерживает channelActive или channelRegister?

ответ

2

A EmbeddedChannel активен после его создания, поэтому обработчики, добавленные вами, добавляются слишком поздно. Добавьте их через конструктор, и он должен работать:

EmbeddedChannel channel = new EmbeddedChannel(
     new LoggingHandler(LogLevel.TRACE), 
     new ClientEventHandler(currentMessage));