Я только что унаследовал проект, использующий netty, и он, кажется, запутался в коде, поскольку создается множество обработчиков, реализующих интерфейсы netty и т. д. Я хочу издеваться над ним таким образом, чтобы я мог добавлять тесты для тестирования из netty API вверх, запускать байты и получать байты обратно, но не подключать для этого сокет. Есть ли способ запустить сам конвейер, который бы тестировал сетевой код, а также наш код, а также получал от кода?
В частности, я хочу сделать что-то вроде этого:
SysUnderTest(channel) {
channel.addReadListener(myListenerImpl);
}
Test {
testStuff() {
channelMock = new MockChannel();
SysUnderTest system = new SysUnderTest(channelMock);
//BIG NOTE: The get here is just getting what the mocked cached when the SysUnderTest
//ended up calling the channel.addReadLsitener(listenerImpl)!!!
ReadListener listenerImplToTest = channelMock.getAddedListenerImpl();
listenerImplToTest.fireNewDataIncoming(byteBuffer1);
Assert.Equals("new state", system.getState());
listenerImplToTest.fireNewDataIncoming(byteBuffer2);
Assert.Equals("state2", system.getState());
}
}
Может быть, мне нужен сдвиг парадигмы, но я думаю, что любое системное тестирование с библиотекой ввода-вывода должно передавать данные слушателю, который будет реагировать. Мой тест должен запускать данные, вызывая метод события реализации слушателя (и он получает listenerImpl через фиктивный канал), но я не вижу, как это сделать в netty. В частности, какой метод запускает данные для приведенного выше примера. Похоже, он читает данные (что больше похоже на блокировку/опрос). Может быть, мне нужно изменить свою парадигму того, как я думаю об этом?