如何使用mockito和junit为Java中的ExecutorService编写测试用例?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用mockito和junit为Java中的ExecutorService编写测试用例?相关的知识,希望对你有一定的参考价值。

如何使用mockito和junit为ExecutorService编写测试用例?

protected void updateRequest(String request) {

      ExecutorService executor = Executors.newFixedThreadPool(1);
      executor.submit(() -> {
          service.callGattuService(request);
      });

      executor.shutdown();
}

之前这个方法不是Multithreaded,而是直接调用service.callGattuService(),后面是测试用例。

@Test 
   public void updateGattu() throws SystemException, SocketException, IOException {
      when(service.callGattuService("11")).thenReturn(something); 

      testSubject.updateRequest(request)

      verify(service, times(1)).callGattuService("11");
   }

我不确定如何操作它以便可以检测/调用ExecuterService。

答案

在这种情况下,最简单直接的解决方案是在验证之前添加延迟而不更改测试逻辑,因为您已经检查了内部方法是否使用特定参数调用,无论是否通过执行程序。

@Test 
public void updateGattu() throws SystemException, SocketException, IOException {
    testSubject.updateRequest("11")
    verify(service, after(2*1000).times(1)).callGattuService("11");
}

不要忘记监视你的服务。希望能帮助到你!

编辑:在以前版本的mockito-all(1.9.5)这里是类似的Mockito.timeout(int)方法,可以像这样使用

@Test 
public void updateGattu() throws SystemException, SocketException, IOException {
    testSubject.updateRequest("11")
    verify(service, timeout(2*1000)).callGattuService("11");
}

以上是关于如何使用mockito和junit为Java中的ExecutorService编写测试用例?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用junit和mockito为私有void方法编写测试用例[重复]

如何使用 mockito 为以下代码编写 junit 测试?

如何解决“论点不同! Junit 和 Mockito 中的通缉犯错误

Mockito & Junit 空指针异常:名称不能为空

Java - JUnit Mockito 方法方法

如何使用 mockito 和 junit 测试此功能?