java – 测试可完成的未来总是通过
作者:互联网
我有以下测试应始终失败:
@Test
public void testCompletable() {
CompletableFuture.completedFuture(0)
.thenAccept(a -> {
org.junit.Assert.assertTrue(1==0);
});
}
而这项测试总是成功的.如何才能使此测试失败?
解决方法:
您永远不会尝试检索可完成的未来的结果.
completedFuture(0)
将返回一个已完成的可完成的未来,结果为0.将调用添加了thenAccept
的消费者,并将返回一个新的可完成的未来.您可以通过在其中放入print语句来验证是否已调用它:
CompletableFuture.completedFuture(0)
.thenAccept(a -> {
System.out.println("thenAccept");
org.junit.Assert.assertTrue(1==0);
});
这将在控制台中打印“thenAccept”.但是,这个新的可完成的未来异常完成,因为Assert.assertTrue抛出异常.这并不意味着向调用者抛出异常:它只是意味着我们现在处理一个特殊完成的可完成的未来.
所以当我们尝试检索调用者将有异常的值时.对于get()
,将抛出ExecutionException,并且在join()
中,将抛出CompletionException.因此,以下
CompletableFuture.completedFuture(0)
.thenAccept(a -> {
org.junit.Assert.assertTrue(1==0);
}).join();
将失败.
标签:completable-future,java,java-8,junit 来源: https://codeday.me/bug/20190724/1524683.html