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

问题描述 投票:0回答:1

如何使用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。

java multithreading junit mockito executorservice
1个回答
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");
}
© www.soinside.com 2019 - 2024. All rights reserved.