我想测试一个通过 EventBus 接收请求并通过 EventBus 发送结果的工人 Verticle。单个请求可能会导致 0,1,2,... 响应——在一般情况下,我们不知道会得到多少响应。
业务逻辑是,一旦处理完成,请求就会被确认,但是响应是以“即发即弃”的方式发送的——因此我们只知道响应已发送,不一定它们已经交付。
我正在为这个verticle写一个测试。
测试代码计划如下:
1. set up consumer for responses
2. send a request
3. wait until request is acked by the worker verticle
4. wait until consumer finishes validating the responses
这里的问题是第 4 步——在一般情况下,我们不知道是否仍有一些响应在飞行中。
蛮力解决方案显然是等待一些合理的时间——通常几毫秒就足够了。然而。我更喜欢概念性的东西。
我想到的一个解决方案是:
- 发送一些我们确定会有单一响应的请求;
- 等到消费者收到相应的响应。这应该可行,但我不喜欢我通过 SUT 发送两条消息而不是一条消息这一事实。
一个不同的解决方案是从测试代码发送一个额外的响应,一旦我们确认请求已被处理 - 但它会被认为是同一个发件人吗?EventBus 只保证来自同一个发件人的交付顺序,而不是来自不同的发件人。测试不在集群模式下运行,所有操作都在同一台机器上执行,但不一定在同一个线程中。
另一种解决方案是以某种方式检查 EventBus 现在是否为空,但据我了解,这是不可能的。
还有其他(更好的)解决方案吗?