所有的测试用例都在成功运行,除了一个测试用例是 in1To10(9,真)→假。
问题:给定一个数字n,如果n在1...10(含)范围内,则返回true。
给定一个数字n,如果n在1... 10的范围内,返回true。除非 outsideMode 为真,在这种情况下,如果数字小于或等于 1,或大于或等于 10,则返回 true。
in1To10(5, false) → truein1To10(11, false) → falsein1To10(11, true) → true。
我的解决方案:-
public boolean in1To10(int n, boolean outsideMode) {
if(n>=1&&n<=10){
return true;
}
else if(outsideMode==true&&(n<=1||n>=10)){
return true;
}else
return false;
}
正如你在问题中提到的,返回的布尔值是基于 outsideMode的布尔值 和 范围(1-10) 价值
但在你的程序中,第一个返回语句的值只由范围标准决定,你没有测试 outsideMode 的布尔值。
1. 解决方法 。将第二个if(condition)换成第一个if(condition)。
public boolean in1To10(int n, boolean outsideMode) {
if((outsideMode==false)&&(n>=1&&n<=10)){
return true;
}
else if(outsideMode==true&&(n<=1||n>=10)){
return true;
}else
return false;
}
2.解决方案。在第一条if(条件)中加入outsideMode,与第二条if(条件)相同。
public boolean in1To10(int n, boolean outsideMode) {
if(outsideMode==true&&(n<=1||n>=10)){
return true;
}
else if(n>=1&&n<=10){
return true;
}else
return false;
}
当你说 "所有测试用例都在成功运行 "时,这是相当误导人的,因为你的测试用例太少了。
对于每个有趣的整数比较,你需要2个测试用例:一个比较成功,一个失败。作为测试数据,你应该选取有区别的两个整数。例如,如果条件是 n > 10
,你应该使用10和11作为测试数据。
在你的方案中,你有一个布尔值,在每个布尔值的情况下,你有两个整数条件。总的来说,这使得 2 * 2 * 2 = 8
测试用例。这比你目前的3个测试用例要多得多,但这是必要的。
通过系统地测试你的代码,你会产生比没有这些测试更可靠的代码,即使这需要一些时间。但换来的是你对代码更有信心,这也是值得的。
进一步阅读:测试覆盖率,条件覆盖率。
先说说 outsideMode
是一个布尔值,所以只要写出 outisdeMode&&(n<=1||n>=10)
你的错误是
if(n>=1&&n<=10){
return true;
}
将在之前执行
else if(outsideMode==true&&(n<=1||n>=10))
因为9 >=1 &&9 <=10,这意味着它将返回真。
换一下就好了
public boolean in1To10(int n, boolean outsideMode) {
if(outsideMode&&(n<=1||n>=10)){
return true;
}
else if(!outsideMode&&n>=1&&n<=10){
return true;
}else
return false;
}
你还没有考虑到 outsideMode
在你的第一次返回中。另外,你还没有在计算返回值时加入逻辑。outsideMode
是 false
.
具体操作如下。
public class Main {
public static void main(String[] args) {
// Tests
System.out.println(in1To10(1, true));
System.out.println(in1To10(2, true));
System.out.println(in1To10(10, true));
System.out.println(in1To10(11, true));
System.out.println(in1To10(1, false));
System.out.println(in1To10(2, false));
System.out.println(in1To10(10, false));
System.out.println(in1To10(11, false));
}
public static boolean in1To10(int n, boolean outsideMode) {
boolean returnValue = false;
if (outsideMode && (n <= 1 || n >= 10)) {
returnValue = true;
} else if (!outsideMode && (n >= 1 && n <= 10)) {
returnValue = true;
}
return returnValue;
}
}
输出:
true
false
true
true
true
true
true
false