私はちょうど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でこれを行う方法はわかりません。具体的には、どのメソッドが上記の例のデータを起動していますか。それはデータを読み込んでいるようです(これはブロッキング/ポーリングのようなものです)。たぶん私はこれについて考えている方法の私のパラダイムを変更する必要がありますか?
うーむ、それは「パイプラインを設定せずに」私はモック何かを渡すところ本当にここにフルブローQAテストをシミュレートしようとしていますが、createpipelineは私がすることができます....コードによって行われていると言います本当にそれを変えないでください。これはやはり何とか働くでしょうか? –