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

时间:2018-02-28 05:48:51

标签: java multithreading junit mockito executorservice

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

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。

1 个答案:

答案 0 :(得分:1)

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

@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");
}