如何在Maven Surefire插件中获取失败测试的对比变量值?
解决Java测试失败时显示断言对比值的问题
当然有办法!Boost Test自动展示断言对比值的体验确实很实用,在Java里我们可以通过几种方式实现类似效果——其实核心是选对断言工具,Maven Surefire只是负责运行测试和收集结果,具体的错误信息展示由你使用的断言库决定:
改用JUnit自带的
assertEquals(最简单直接)
把你当前的Assert.assertTrue替换成assertEquals,这个方法会在断言失败时自动输出预期值和实际值。比如:assertEquals(sequenceNumber, HHH.getSequenceNumber());失败时的错误信息会变成:
java.lang.AssertionError: expected:<[你的预期数值]> but was:<[实际返回数值]> at org.junit.Assert.fail(Assert.java:89) ... testSendRequest(sendRequestTest.java:295)给
assertTrue手动添加自定义错误消息
如果你坚持要用assertTrue,可以把包含两个值的说明作为第三个参数传入:Assert.assertTrue( "Sequence number不匹配:预期值=" + sequenceNumber + ",实际值=" + HHH.getSequenceNumber(), HHH.getSequenceNumber() == sequenceNumber );这样断言失败时,错误信息里会直接显示两个值的具体内容。
使用更强大的断言库(比如AssertJ)
AssertJ是比JUnit自带断言更灵活的工具,它的流畅式API不仅写起来顺手,还默认会输出清晰的对比细节。先在Maven中引入依赖,然后修改断言代码:import org.assertj.core.api.Assertions; // ... Assertions.assertThat(HHH.getSequenceNumber()).isEqualTo(sequenceNumber);失败时的错误信息会非常直观:
java.lang.AssertionError: Expecting: <[实际返回数值]> to be equal to: <[你的预期数值]> but was not. at ... testSendRequest(sendRequestTest.java:295)
内容的提问来源于stack exchange,提问作者david.t_92
相关产品推荐
相关产品推荐

