测试中的JUnit5断言计数

测试中的JUnit5断言计数,junit,assertion,junit5,Junit,Assertion,Junit5,有没有办法确定测试中调用的断言的数量?我正在使用,并且可以计算通过次数、每个测试标识符中的失败次数,但不能计算断言次数。这在结果分析和报告中很重要,因为不是每个测试都具有相同的“密度”,而不是很长一段时间 我可以在每个断言周围提供一个包装器,用于增加计数或在测试注释中存储硬编码的总和,但前者引入了一个契约,对于JUnit5中的一个简单hack,必须维护该契约,或者可以忽略该契约,而后者涉及大量手动计数。谢谢 import static org.junit.jupiter.api.Assertio

有没有办法确定测试中调用的断言的数量?我正在使用,并且可以计算通过次数、每个测试标识符中的失败次数,但不能计算断言次数。这在结果分析和报告中很重要,因为不是每个测试都具有相同的“密度”,而不是很长一段时间

我可以在每个断言周围提供一个包装器,用于增加计数或在测试注释中存储硬编码的总和,但前者引入了一个契约,对于JUnit5中的一个简单hack,必须维护该契约,或者可以忽略该契约,而后者涉及大量手动计数。谢谢

import static org.junit.jupiter.api.Assertions.assertEquals;
...
int index = 0;
while (index < testValueCount){
    assertTrue(testValue[index]>0);               // Want to capture testValueCount assertions here, not 1 (or none)
    ++index;
}
导入静态org.junit.jupiter.api.Assertions.assertEquals;
...
int指数=0;
while(索引0);//要在此处捕获testValueCount断言,而不是1(或无)
++指数;
}

不,很遗憾,这是不可能的

JUnit平台和JUnit Jupiter都没有提供跟踪所执行断言数量的方法


如果您确实需要这样的功能,您需要自己包装断言调用,或者找到一个支持调用跟踪的断言框架。

断言的数量有多大帮助?通常,我们关注测试代码的覆盖率和我们实际断言的内容。我正在绘制测试覆盖率图,有两个测试需要花费更多的精力来实现和提供更多的覆盖率。大多数测试在“场景”中执行4个断言,但这些测试在循环中执行计算(断言)。前者通常循环100000条数据记录,后者循环1条记录,但执行60次断言。我认为这些应该以某种方式显示在图中,但通过/失败计数是一个开始。缺少功能可能是故意的,我一直在考虑扩展org.junit.jupiter.api.Assertions,但是方法签名会有所不同,因为我无法覆盖静态方法。然后,测试框架可以实例化扩展的内容,并将其跟踪的计数存储在结果中。我将以更清晰的头脑重新审视这一点,并将您的答案标记为最有可能的答案。作为JUnit 5的设计师之一,我可以确认这是有意的。;-)@SamBrannen你能分享一下它背后的意图吗?@martin,JUnit Jupiter中的
断言
API是一个过于简单的断言库。它没有绑定到JUnit Jupiter的扩展模型中。因此,开发人员可以自由选择他们想要的任何断言库(例如,AssertJ、Hamcrest、Truth等)。我不确定我是否会将Jupiter断言API称为过于简单化。就我个人而言,在JUnit4和JUnit5之间进行了改进之后,我从AssertJ切换回了JUnitAPI。