条件覆盖和单元测试

问题描述 投票:0回答:1

编写单元测试时(使用JUnit),是否有必要单独的测试方法,以达到完整的条件覆盖?

借此片段,例如:

int foo(boolean a, boolean b, boolean c){
    if(a && b && c)
        return 1;
    else return 0;
}

它是更好,如果这一点,如果编写条件覆盖一个方法和不同的说法?或者每个条件的一个方法是什么?

@Test
void conditionsTest(){
    assertEqual(0, foo(true, false, false));
    assertEqual(0, foo(true, true, false));
    assertEqual(1, foo(true, true, true));
    ...
}

要么

@Test
void condition1Test(){
    assertEqual(0, foo(true, false, false));
}

@Test
void condition2Test(){
    assertEqual(0, foo(true, true, false));
}

@Test
void condition3Test(){
    assertEqual(1, foo(true, true, true));
}
unit-testing junit separation-of-concerns test-coverage
1个回答
1
投票

虽然没有必要分裂测试中,它可以更好地做到这一点:

  1. 所有功能于一身的测试功能将中止第一个失败的断言执行。在其他组合的任何信息。分开时,你将有哪些组合不能准确更详细的信息。需要注意的是parameterized tests将达到相同的。
  2. 从一个覆盖点的所有功能于一身的测试将积聚覆盖在一个单一的测试。由于无法分析的条件的每个组合的贡献。去为更复杂的条件覆盖指标,如MC/DC时变得更有价值。

诚然:第​​二个方面取决于您的覆盖工具提供的数据采集的粒度。我们公司的工具Coco收集覆盖每个测试功能,但对于C,C ++和C#这样做,仅此而已。你可能想看看对于Java代码相当于能力。

© www.soinside.com 2019 - 2024. All rights reserved.