mockito - 使用 mockito 测试异步 Vertx 和 RxJava 方法
问题描述
我有一个在 上发送消息的类vert.x event bus
,然后处理来自事件总线使用者的回复。当类运行时,它调用在构造函数或特定方法调用中传递给它的对象上的方法。
为了验证传入的对象上的方法是否确实被调用,使用 Mockito 模拟该对象。下面是测试类的基本结构:
@RunWith(VertxUnitRunner.class)
public class MyTest {
@Rule
public RunTestOnContext rule = new RunTestOnContext(new VertxOptions());
@Test
public void test(TestContext context) {
Runnable r = new Runnable() {
@Override
public void run() {
// Create an event bus consumer for testing
// ...
// Create the class to be tested
Dao dao = new Dao();
DbManager dbManager = Mockito.mock(DbManager.class);
dao.save(dbManager);
}
}
Thread t2 = new Thread(r);
t2.start();
t2.join();
Mockito.verify(dbManager, ...
async.complete();
}
}
这仅在某些时候有效。问题是,当dao
类向 发送异步消息vert.x event bus
并处理响应时,这一切都发生在与join()
调用正在等待的线程不同的线程中,因此Mockito.verify
可能发生在 vertx 管理的线程完成之前.
构建这些测试的最佳方法是什么,以便 Mockito 将等待所有相关的异步线程完成?
谢谢
解决方案
我想到的唯一一件事是使用超时进行验证,这意味着 mockito 将等待指定的时间段进行交互,而不是立即失败。
Mockito.verify(dbManager, Mockito.timeout(5000)).....
推荐阅读
- android - 获取 mp3 文件的单个图像太慢
- python - python中的浅拷贝
- c# - 如何在C#中找到2个字符串之间的差异并替换原始字符串中的不同内容
- php - 仅显示特定类别 Prestashop 的库存产品
- android - 使用 viewpager 在坐标布局中滚动滞后
- php - 我想从我的 php 邮件脚本中删除验证章节
- python - Python - 如何使用 fork execl 读取“标准输入”和调用“cat”命令(bash)?
- python - Python 2.7 将 %(百分比)替换为 \(斜杠)但得到了 \\(双斜杠)
- python - 将参数传递给 paho mqtt 回调
- java - 如何从 getTextWidth 方法返回的值中生成变量?