Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java 如何使用带有EmbeddedChannel的rxNetty客户端进行测试_Rx Java_Rx Netty - Fatal编程技术网

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的内部连接起来。文档很少,所以我在这里有点茫然