gpt4 book ai didi

java - 100% 分支覆盖率无故障的测试用例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:50 26 4
gpt4 key购买 nike

问题陈述是

一个零错误的方法,您可以为其编写一个具有 100% 语句覆盖率但未找到错误的测试套件,而另一个具有 100% 分支覆盖率的测试套件确实揭示了错误?

这是我写的相同的方法

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% 但未发现错误的测试套件怎么样

最佳答案

让我们再举一个例子...

// 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;

}

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

assertEquals(0, doSomething( 0, 12) );  // works, as 0 * 0 == 0 * 12
assertEquals(20, doSomething( 10, 10 ) ); // works fine

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

assertEquals(12, doSomething( 1, 12) );  // fails, because it will be 1*1 == 1

同样的问题可能发生在任何其他情况下,包括被零除。无法想象一个很好的例子,但我猜你已经明白了 100% 的覆盖率并不意味着找到 100% 的所有错误。 (找到它们的一种很酷的方法是突变测试,但这是一个非常高级的主题。)

关于java - 100% 分支覆盖率无故障的测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com