如何对 Java 的未来超时进行单元测试?

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

我的目标是编写一个单元测试来测试

TimeoutException
是否被抛出。

这是我的逻辑:

public String getString() {
  String myString;
  ExecutorService executorService = Executors.newSingleThreadExecutor(); 
  Future<String> future = executorService.submit(() -> someService.getString());
  try {
    myString = future.get(2, SECONDS);
  } catch (TimeoutException exception) {
    // ...
  } 
  return myString;
}

我用 Mockito 尝试了一些东西,但它们不起作用。意思是,超时不会发生。

SomeService someService = mock(SomeService.class);
Mockito.when(someService.getString()).thenAnswer(invocation -> {
  Thread.sleep(50000);
  return "response";
});
doAnswer(new AnswersWithDelay(50000, new Returns("string"))).when(someService).getString();

有人可以提供一些关于我如何编写会遇到

TimeoutException
的测试的见解吗?

java asynchronous junit mockito future
© www.soinside.com 2019 - 2024. All rights reserved.