全班覆盖单元测试

时间:2014-09-17 22:38:24

标签: java unit-testing junit branch

我目前正在研究单元测试,但不太确定如何实现完整的分支和类覆盖。

鉴于以下课程:

public class foo
{

  public int multiply(int a, int b)
  {
      int returnVal = 0;
      if(a==0 || b == 0)
      {
         return returnVal;
      }
      if(a==1)
      {
        return b;
      }
      else if(b==1)
      {
         return a;
      }
      for(int i = 0; i < a; i++)
      {
         returnVal += b;
      }
}

我可以对上面的代码做些什么来使其具有100%的分支覆盖能力?

3 个答案:

答案 0 :(得分:1)

  

我可以对上面的代码做些什么来使其具有100%的分支覆盖能力?

如果我已正确阅读您的代码,则无需更改代码。如果您想要100%覆盖率,您只需要适当地设计测试用例

(提示:如果我计算得当,你可以通过一组5个测试用例获得100%的覆盖率......)

答案 1 :(得分:0)

您可以通过5个单元测试覆盖所有代码。

测试

当a = 0 时

multiply(0, 13)必须返回0

当b = 0

multiply(13, 0)必须返回0

<= 3>当a = 1 时

multiply(1, 13)必须返回13

当b = 1

multiply(13, 1)必须返回13

名义案例

multiply(5, 4)必须返回20

提示

请注意,使用Junit,您可以使用parameterized tests

答案 2 :(得分:0)

还有更多要添加为覆盖标准而不仅仅是

  

完整的分支和班级覆盖

就够了。如果我们谈论基本覆盖标准,则有许多覆盖标准,主要是:

  • 功能覆盖 - 是否已调用程序中的每个功能(或子程序)?
  • 声明范围 - 程序中的每个声明是否已执行?
  • 已经提到分支覆盖范围 - 每个控制结构的每个分支(也称为DD路径)(例如if和case语句)是否已执行? 例如,给定if语句,是否已执行true和false分支?另一种说法是,程序中的每个边缘都已执行了吗?
  • 条件覆盖率(或谓词覆盖率) - 是否将每个布尔子表达式都评估为true和false?

如果您有兴趣并希望详细了解 - code coverage criteria