Junit 5覆盖率测试缺少4个分支中的1个



我的测试显示缺少4个分支中的1个,我不知道为什么。

public Classification classify() {
if (points >= 1 && points <= 4) {
return Classification.First;
}

我运行的测试:

@Test
void Test1() {
int p = 3;
Grade grade = new Grade(p);
assertEquals(grade.classify(), Classification.First);
}

@Test
void Test2() {
int p = 6;
Grade grade = new Grade(p);
assertNotEquals(grade.classify(), Classification.First);
}

1/4分支覆盖范围显示在if (points >= 1 && points <= 4) {

不太确定我现在遗漏了哪一个分支。有什么建议吗?

简单回答:您也应该使用p < 1进行测试,例如使用p = 0

长答案:当测试这些东西时,你应该总是测试内界、外界,在这种情况下,还测试,包括界值。事实上,保险范围甚至没有告诉你所包含限额的遗漏案例。

您的案例points >= 1 && points <= 4将有以下案例:

  1. 点<1
  2. 点数=1
  3. 介于1<点<4(所以2或3(
  4. 点数=4
  5. 点数>4

案例2、3、4在覆盖范围内被认为与分支相同,但作为一项要求,它们实际上并不相同。我们可能会从实现(如果是白盒测试(中看到,如果只在(2,3(值1 <= points <= 4之间的evlaue上进行测试,应该不会有问题,但如果我们不知道实现(黑盒测试(,可能会有问题。同样,即使实现是已知的,测试限制仍然是一个好主意,因为实现稍后可能会更改。

最新更新