首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有故障的100%分支覆盖的测试用例?

没有故障的100%分支覆盖的测试用例?
EN

Stack Overflow用户
提问于 2015-11-05 03:29:01
回答 2查看 7.2K关注 0票数 6

问题陈述是

一种具有零错误的方法,您可以将测试套件写到具有100%语句覆盖率但没有找到故障的测试套件,以及另一个具有100%分支覆盖率的测试套件,它可以显示故障吗?

下面是我为同一篇文章编写的方法

代码语言:javascript
复制
public  faultyMethod1(int x, int y) {
  int X =x;
  int Y = y;

  if (Y !=0){
    Z = X/Y;
  } else {
    System.out.println("Sorry. That's an DiviDeByZeroException");
  }
}

faultyMethod1 (1,2);
faultyMethod1 (2,0);

以上代码实现的测试套件具有100%的分支覆盖率,确实显示了故障“

如果测试套件有100%的语句覆盖率,但没有发现错误,那该怎么办?

EN

回答 2

Stack Overflow用户

发布于 2015-11-05 11:00:09

我们再举一个例子..。

代码语言:javascript
复制
// The method, according to our imaginary specification, should do:
//  return x * y, IF x is less than 2
//  return x + y, in any other case
public int doSomething(int x, int y) {

if (x < 2 ) {
   return x * x;  // this is our bug, it SHOULD be x * y
}

return x + y;

}

现在假设我们有两个测试:

代码语言:javascript
复制
assertEquals(0, doSomething( 0, 12) );  // works, as 0 * 0 == 0 * 12
assertEquals(20, doSomething( 10, 10 ) ); // works fine

所以,现在我们有100%的测试覆盖率(因为x<2分支已经覆盖了,而另一个分支也已经覆盖了)。但是我们没有找到这个bug,因为使用0作为x的值隐藏了它(因为0*某些东西总是0,y是无关的)。我们需要这样的东西..。

代码语言:javascript
复制
assertEquals(12, doSomething( 1, 12) );  // fails, because it will be 1*1 == 1

同样的问题也可能发生在任何其他情况下,包括除以零。无法想象有一个好的例子,但我想你已经基本知道,拥有100%的覆盖率并不意味着找到100%的所有but。(找到它们的一个很酷的方法是突变测试,但这是一个相当高级的话题。)

票数 6
EN

Stack Overflow用户

发布于 2015-11-05 16:20:59

把逻辑和OR混淆起来怎么样?

代码语言:javascript
复制
// This method must never throw; on error, it shall return -1.
int foo(final String s, final int n) {
    if (s != null || n != 0) {
        return s.length() / n;
    } else {
        return -1;
    }
}

下面的测试输入达到100 %的语句覆盖率,并且不公开错误。

代码语言:javascript
复制
assert foo("everything is fine", 6) == 3;  // happy path, ok
assert foo(null, 0) == -1;                 // error path, ok

但是,测试套件没有foll分支覆盖,因为在每种情况下,两个表达式ORed一起计算的值是相同的。添加以下两个测试用例将完成分支覆盖率并公开错误。

代码语言:javascript
复制
assert foo("bingo", 0) == -1;  // ArithmeticException
assert foo(null, 4) == -1;     // NullPointerException

事实上,这四种输入结合在一起也实现了路径覆盖,这是比分支覆盖更强的要求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33536168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档