【问题标题】:Coverage: Branch and path coverage test caseCoverage:分支和路径覆盖测试用例
【发布时间】:2018-03-29 18:48:54
【问题描述】:

我需要以这样的方法实现除零运算 (1) ​每个​实现 100% 路径覆盖率的测试套件都会揭示故障; (2) ​可以​创建​一个​实现 100% 分支覆盖率且​不​​揭示​故障​的​测试​套件。

由于除以零是非常简单的操作,我想知道这种方法的实现,以满足这两个要求。目前,我无法做到,因为我的分支和路径覆盖测试用例都显示一个错误(ArithmeticException)并且是相同的。

这是我当前的代码,但它是错误的。

void method1(int m, int n)
         int p = m / n;
         if (n != 0) {
         System.out.println("Print some value");
         }
         if (n == 0) {
         System.out.println("Infinity");
         }
         return p;

谢谢

【问题讨论】:

    标签: java junit4 white-box-testing


    【解决方案1】:

    嗯,我猜这只是一种练习,所以人们可以做一些非常愚蠢的事情,像这样:

    double method1(int m, int n) {
         double p;
         if (n >= 0) {
             p = m / n;
         } else {
             p = m / n;
         }
    
         if (n > 0) {
             p = m / n;
         } else {
             p = m / n;
         }
    
         return p;
    }
    

    这样,如果你有完整的路径覆盖,那么你一定已经覆盖了 在第一个条件下进入n >= 0 分支,在第二个条件下进入n <= 0 分支。因此,每一个 100% 的路径覆盖套件都必须在某些测试用例中使用 n = 0,这会像在您的代码中那样引发 ArithmeticException,因此会发现该方法的错误。

    另一方面,您只需要 n = 1n = -1 测试用例即可实现完整的分支覆盖(愚蠢的测试套件,诚然),但您完全错过了零除法部分。但是,我没有对此进行测试。

    【讨论】:

    • 不确定您是否编辑了这个或什么,但上面的代码与您的评论不匹配 - 没有n <= 0 的情况,只有n > 0 and n >= 0 @987654329 时第一个显然不是真的@ 因而不会被执行。
    • 第二个(条件)中的“n <= 0 分支”是指else 分支。要覆盖由第一个条件下的if 分支和第二个条件下的else 分支组成的路径,必须使用n = 0
    【解决方案2】:

    首先检查除数是否等于 0,然后返回或抛出异常。等待除以 0,当您知道这是一个真正的可能性时,这不是一个好习惯。

    【讨论】:

    • int c = 0; if (b == 0) { System.out.println("对不起。这是一个 DiviDeByZeroException"); } 否则 c = a / b;返回 c;即使我这样做,我的分支和路径覆盖也将变得相同。如何确保分支覆盖不会通过异常而路径覆盖?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    相关资源
    最近更新 更多