当前位置: 首页 > 知识库问答 >
问题:

Mockito:验证是否执行了线程中指定的方法?

缪远
2023-03-14
void enact(@NonNull final Request request) {
        XInput input = this.xBuilder.buildInputPayload(request);
        final Thread componentThread = new Thread(()->this.component.runJob(input));
        componentThread.start();
        return;    
}

void testVTService_Success() {
        when(xBuilder.buildInputPayload(any(Request.class))).thenReturn(inputPayloadWithAllArguments);
        activity.enact(TestConstants.request);
        verify(component, times(1)). runJob(any(XInput.class)); //Verification
    }

共有1个答案

刘建中
2023-03-14

您的测试在一个线程上运行,而测试中的代码运行一个新线程。

这意味着由于多线程,您的测试验证在runjob方法之前运行。

在这一点上,测试说“想要但没有调用”是正确的(测试代码运行,检查生产方法是否运行,它没有...然后在后台生产代码运行(太晚了))。

void testVTService_Success() {
    when(xBuilder.buildInputPayload(any(Request.class)))
    .thenReturn(inputPayloadWithAllArguments);

    activity.enact(TestConstants.request);

    try { Thread.sleep(TimeUnit.SECONDS.toMillis(10)); } catch (Exception e) { assertTrue(false); }

    verify(component, times(1)). runJob(any(XInput.class)); 
}
 类似资料:
  • 我有一个测试,我已经编写了我需要的大部分单元测试,但是有一个我想测试逻辑的第一位。只要调用了方法,我不在乎方法的其余部分会发生什么,但是由于缺乏进一步的模拟,SUT在NPE中失败,所以在我断言之前测试就失败了。 是否有一种明确的方法来断言调用了某个方法并忽略此后发生的所有异常?也许是在命中方法并在之后中止/通过测试时的某种阻塞行为? 我想我可以写然后简单地断言我得到了正确的异常(不过,它将被包装在

  • 问题内容: 我目前正在研究一个问题,该问题将在同一数据集上比较三种不同的机器学习算法的性能。我将数据集分为70/30训练/测试集,然后使用GridSearchCV和进行网格搜索以找到每种算法的最佳参数。 第一个问题,我是应该对训练集执行网格搜索,还是应该对整个数据集进行网格搜索? 第二个问题,我知道GridSearchCV在其实现中使用K折,如果我对GridSearchCV中比较的所有三种算法都使

  • 客户端创建新的websocket从池中取出一个线程来创建ServerEndpoint的新实例并执行@onOpen方法。在该线程放回池中之后。 客户端通过websocket向服务器发送消息。从池中取出线程以执行@onMessage方法。在该线程放回池中之后。 客户端关闭websocket-从池中取出线程以执行@onClose方法。在该线程放回池中之后。 这都意味着ServerEndpoint的每个方

  • 问题内容: 众所周知,JavaScript在所有现代浏览器实现中都是单线程的,但是它是在任何标准中指定的,还是仅根据传统?假设JavaScript始终是单线程的,是否完全安全? 问题答案: 这是个好问题。我很想说“是”。我不能 通常认为JavaScript具有脚本(*)可见的单个执行线程,因此,当您输入内联脚本,事件侦听器或超时时,您将完全处于控制状态,直到从块或函数的结尾返回为止。 (*:忽略浏

  • 需要检测两个对象的状态,并且任务需要实时。run方法使用while(flag)循环通过更改flag=false来结束线程的生命周期。线程通常需要运行40分钟或更长时间。使用线程池将导致核心线程池耗尽,而任务将进入队列,因为每个线程将运行40分钟,每个线程的执行时间非常长且不固定,因此必须有许多线程无法及时响应。 我尝试使用新线程(runnable)。Start()而不是使用线程池ThreadPoo