Rx java 如何使用带有EmbeddedChannel的rxNetty客户端进行测试
考虑到我的Rx java 如何使用带有EmbeddedChannel的rxNetty客户端进行测试,rx-java,rx-netty,Rx Java,Rx Netty,考虑到我的TcpClient是这样的: TcpClient.newClient(...) .pipelineConfigurator(...) .createConnectionRequest() .flatMap(c -> c.getInput()) EmbeddedChannel channel = new EmbeddedChannel() ChannelPorivderFactory providerFactory = (a,
TcpClient
是这样的:
TcpClient.newClient(...)
.pipelineConfigurator(...)
.createConnectionRequest()
.flatMap(c -> c.getInput())
EmbeddedChannel channel = new EmbeddedChannel()
ChannelPorivderFactory providerFactory = (a,b,c,d) -> n -> Observable.just(channel);
TestSubscriber<Object> subscriber = new TestSubscriber<>();
TcpClient.newClient(...)
.pipelineConfigurator(...)
.channelProvider(providerFactory)
.createConnectionRequest()
.flatMap(c -> c.getInput())
.subscribe(subscriber);
embeddedChannel.writeInbound(serverMessage);
subscriber.assertValueCount(1);
我想使用Netty的EmbeddedChannel
来测试它,以模拟服务器和客户端之间的交互,并对EmbeddedChannel
和TestSubscriber
进行断言
我正在努力寻找通过EmbeddedChannel
实现这一点的方法。我在看channelProvider()
时是这样做的:
TcpClient.newClient(...)
.pipelineConfigurator(...)
.createConnectionRequest()
.flatMap(c -> c.getInput())
EmbeddedChannel channel = new EmbeddedChannel()
ChannelPorivderFactory providerFactory = (a,b,c,d) -> n -> Observable.just(channel);
TestSubscriber<Object> subscriber = new TestSubscriber<>();
TcpClient.newClient(...)
.pipelineConfigurator(...)
.channelProvider(providerFactory)
.createConnectionRequest()
.flatMap(c -> c.getInput())
.subscribe(subscriber);
embeddedChannel.writeInbound(serverMessage);
subscriber.assertValueCount(1);
EmbeddedChannel=新的EmbeddedChannel()
ChannelPorivderFactory providerFactory=(a、b、c、d)->n->可观察。仅(通道);
TestSubscriber subscriber=新的TestSubscriber();
TcpClient.newClient(…)
.pipelineConfigurator(…)
.channelProvider(providerFactory)
.createConnectionRequest()
.flatMap(c->c.getInput())
.认购(认购人);
embeddedChannel.WriteInBond(serverMessage);
认购人:资产价值计数(1);
我现在可以channel.writeInbound(someServerResponse)
并且我可以在Netty wire日志中看到字节被写入,但是我收到了这个消息
在频道上接收到数据,但未注册订户。丢弃数据。
我在订阅后写数据
我遗漏了什么?我猜订户在入站路径上接收消息,所以
writeOutbound()
以错误的方式发送消息。您可以通过向记录其输入的管道添加两个通道处理程序来显式检查方向。@BobDalgleish捕捉得好!虽然它也不起作用,但我现在看到的是来自rxNetty的消息:在通道上接收到数据,但没有注册订户。正在丢弃数据。
尽管订阅后我正在向EmbeddedChannel
写信……@BobDalgleish。为了反映这一点,我对问题进行了编辑。您省略了所有细节,特别是flatMap()
转换。我现在怀疑您的flatMap()
没有将连接请求映射到数据流中。我认为情况并非如此。我更新了一个问题,它简单地表明flatMap()
应该将来自Netty管道的任何信息传递到流中,但rxNetty仍然会丢弃消息,因为它认为没有订阅任何内容。。。我认为我通过嵌入式通道的方式可能无法将其与rxNetty的内部连接起来。文档很少,所以我在这里有点茫然