1

假设我在 java 方法中有很多嵌套循环(3-4 级),每个循环都可以有一些 if-else 块。我如何检查所有这些东西是否正常工作?我正在寻找一种合乎逻辑的方法来测试它,而不是使用诸如替换非法值之类的蛮力方法。

编辑:您还可以为初学者推荐一些好的测试书籍吗?

4

5 回答 5

3

我一直被教导基本测试的方式是尽可能地处理边缘情况。

例如,如果您正在检查变量 i 介于 0 和 10 之间的条件,if(i>0 &&i<10)我自然会测试一些使测试条件为真的值,最好靠近边缘,然后是边缘上的一些值,它们是真假,最后是超出范围的案例。在上述条件下,我会测试 1,5 ,9, 0, 10, -1, 11,最后是一个非常大的整数,包括正数和负数。

这种做法违背了“不替换非法值)”,但我觉得你必须这样做以确保你的条件正确失败。

于 2012-07-30T23:27:44.043 回答
1

EMMA是一个代码覆盖率工具。你在 EMMA 下运行你的单元测试,它会生成一个带有彩色源代码的 HTML 报告,显示哪些行已到达,哪些未到达。基于此,您可以添加测试以确保您正在测试所有不同的分支。

代码中的每个 if/then 都包含一个布尔子表达式,就像循环中用于决定是否进入/重新运行循环的子表达式一样。谓词覆盖率应该告诉你你的测试有多彻底。

维基百科解释谓词覆盖

条件覆盖(或谓词覆盖) - 每个布尔子表达式是否评估为真和假?这并不一定意味着决策覆盖。

于 2012-07-30T23:26:14.333 回答
1

我相信使用调试是找到错误的最简单方法。您可以在此链接中找到有关调试的完整说明:http: //www.ibm.com/developerworks/library/os-ecbug/

您也可以使用此链接:http ://webster.cs.washington.edu:8080/practiceit/进行练习。

于 2012-07-31T10:27:18.403 回答
0

例如,查找将通过每个具有某些值的循环的输入。然后找到将通过 if 的每个分支的输入。然后找到将通过具有大或小或非法值的循环的输入。

于 2012-07-30T23:22:15.023 回答
0

设置一些输入和输出数据。自己计算。创建一个类来检查输出值是否与您单独计算的值匹配。

例子:

输入:数组(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();    
    }
}
于 2012-07-30T23:25:22.133 回答