【发布时间】:2021-10-28 11:04:33
【问题描述】:
我有一个非常奇怪的极端情况,即未来每运行数千次就无法按预期完成。我能够持续触发故障的唯一方法是重复运行测试直到它失败。
说测试:
public class TestFunctionality(){
@Mock private MockIntegrationA mockIntegrationA;
@InjectMocks private MyHandler unitUnderTest;
@BeforeEach
public void init(){
MockitoAnnotations.openMocks(this);
}
@Test
public void testManagerFailThenSucceed(){
when(mockIntegrationA.callRestMethod(any())
.thenThrow(new RuntimeException(""))
.thenReturn(CompletableFuture.completedFuture(null));
CompletableFuture<Void> result = unitUnderTest.invokeMethod();
assertTrue(result.isCompletedExceptionally());
result = unitUnderTest.callFunction();
assertFalse(result.isCompletedExceptionally());
}
}
上面测试中的第一个断言是当测试出错时触发的。是否存在未正确清洁的问题或导致第一个结果没有异常完成的边缘情况?
【问题讨论】:
-
不看
invokeMethod的代码很难说。 -
射击,遗憾的是,如果不分享我不允许分享的内容,我无法以任何有意义的方式展示该代码。
-
很明显的可能性是您正在调用
runAsync,并且在您断言时还没有发生异常。 -
嗯,我们确实有类似使用 supplyAsync 模拟的集成之一。但是,我如何才能从 unitUnderTest.invokeMethod 获得回报,而我们的 return 语句中涉及的期货没有完成,因为它们被链接在一起?
标签: java junit mockito junit5 completable-future