假设我在java方法中有很多嵌套循环(3-4级),并且每个循环都可以有一些if-else块。如何检查所有这些是否正常工作?我正在寻找一种合乎逻辑的方法来测试它,而不是使用强力方法来代替非法值。
编辑: 你能为初学者推荐一些好的测试书吗?
答案 0 :(得分:3)
我一直被教授基本测试的方法是尽可能地处理边缘情况。
例如,如果你正在检查变量i在0到10 if(i>0 &&i<10)
之间的条件,我自然会测试的是一些使测试条件成立的值,最好是在边缘附近,然后是几个在真实和虚假的组合的边缘,最后是超出范围的情况。在上述条件下,我测试了1,5,9,0,10,-1,11,最后是一个非常大的整数,包括正数和负数。
这种情况违背了“不替代违法的价值观”,但我觉得你必须这样做,以确保你的条件不正确。
答案 1 :(得分:1)
EMMA是一种代码覆盖率工具。您在EMMA下运行您的单元测试,它将生成一个带有彩色源代码的HTML报告,显示已到达哪些行以及哪些行未到达。在此基础上,您可以添加测试以确保您测试所有各个分支。
代码中的每个if / then包含一个布尔子表达式,循环中使用的子表达式决定是否进入/重新运行循环。谓词报道应该告诉你一个好的想法,你的测试有多彻底。
Wikipedia解释了谓词覆盖率
条件覆盖(或谓词覆盖) - 每个布尔子表达式都被评估为true和false?这并不一定意味着决策覆盖。
答案 2 :(得分:1)
我相信使用调试是查找错误的最简单方法。您可以在此链接找到有关调试的完整说明:http://www.ibm.com/developerworks/library/os-ecbug/。
您也可以使用此链接:http://webster.cs.washington.edu:8080/practiceit/进行练习。
答案 3 :(得分:0)
例如查找输入,它将通过某些值遍历每个循环。然后找到将通过if的每个分支的输入。然后找到将通过具有大或小或非法值的循环的输入。
答案 4 :(得分:0)
设置一些输入和输出数据。自己做计算。 创建一个类来检查输出值是否与您单独计算的值相匹配。
示例:
input:Array(3,4,5,6);
输出(奇数之和):8
class TestClass{
//test case
//here you keep changing the array (extreme values, null etc..
public void test1(){
int[] anArray=new int[4];
anArray[0] = 3;
anArray[1] = 4;
anArray[2] = 5;
anArray[3] = 6;
int s=Calculator.oddSum(x);
if (s==8)
System.out.println("Passed");
else
System.out.println("Failed");
}
public static void main(){
TestClass t=new TestClass();
t.test1();
}
}