gpt4 book ai didi

java - 单元测试分支覆盖率低于 100%。如何解决这个问题?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:27 41 4
gpt4 key购买 nike

我有一个内存递归函数来计算斐波那契数。我有这个功能的测试用例。基本上它发送一个位置,如果该位置已经有一个数字,则返回它,如果没有,则计算它。我通过调试器运行我的代码并意识到:

if (dictionary[position] != null){
result = dictionary[position];
}

从未被击中。完整代码如下。例如,如果您有calculatefib(4),它将要求fib(3),它将要求fib(2),它将要求fib(1),它将要求fib(0),并且当堆栈开始关闭时,这些值永远不会被保存。因此,例如 fib(2) 或者更确切地说 dictionary(2) 始终为 null。它在调试器中令人困惑的原因是它显示值已计算,但当堆栈开始关闭时,它们再次为空。我如何重构代码以使这些行始终被命中。

public BigInteger calculateFib(int position) {

final BigInteger[] dictionary = new BigInteger[100000];

BigInteger result = BigInteger.ONE;

if (position < 2) {
return result;
}
else {
if (dictionary[position] != null){
result = dictionary[position];
}
else {
result = calculateFib(position - 1).add(calculateFib(position - 2));
dictionary[position] = result;
}
return result

最佳答案

您应该在方法外部声明您的备忘录存储,因为它必须记住跨方法调用的内容。现在,您正在为每个方法调用创建一个新的“备忘录”存储字典,因此您永远不会记住任何内容。

将其从方法外部带到类实例:

final BigInteger[] dictionary = new BigInteger[100000];

喜欢

class MyClass {
final BigInteger[] dictionary = new BigInteger[100000];

public BigInteger calculateFib(int position) {
BigInteger result = BigInteger.ONE;

if (position < 2) {
return result;
}
else {
if (dictionary[position] != null){
result = dictionary[position];
}
else {
result = calculateFib(position - 1).add(calculateFib(position - 2));
dictionary[position] = result;
}
return result
}
}
}

关于java - 单元测试分支覆盖率低于 100%。如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999068/

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