Току-що наследих проект, използващ netty и изглежда, че се заплита в кода, тъй като много манипулатори са създадени, внедряващи netty интерфейси и т.н. Искам да го подиграя по такъв начин, че да мога да добавя тестове за тестване от netty api нагоре, изстрелване на байтове и получаване на байтове обратно, но без свързване на сокет за това. Има ли някакъв начин сам да се задействам в тръбопровода, който да тества netty кода, както и нашия код и също да получава от кода?
По-конкретно, търся да направя нещо подобно:
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());
}
}
Може би имам нужда от промяна на парадигмата, но мисля, че всяко системно тестване с IO библиотека трябва да изстрелва данни към слушател, който ще реагира. Моят тест трябва да задейства данни чрез извикване на метода на събитието на слушателя (и той получава listenerImpl през макетния канал), но не виждам как да направя това в netty. По-конкретно, кой метод изстрелва данни за примера по-горе. Изглежда, че чете данните (което изглежда по-скоро като блокиране/проучване). Може би все пак трябва да променя парадигмата си за начина, по който мисля за това?