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

How to write test case using mockito and junit for ExecuterService in Java?

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

protected void updateRequest(String request) {

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

      executor.shutdown();
}

之前这个方法不是多线程的,直接调用了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 可以 detected/called。

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

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