测试Java程序的最佳方法

时间:2018-08-24 08:05:08

标签: java unit-testing testing testcase

我想测试下面的java程序。

public boolean handleMessage(SOAPMessageContext smc) {
  ctx.put(*HTTPConstants.CHUNKED*, "false");
  return true;
}

这就是我试图测试程序的方式

package com.arrays;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Find all pairs in an array of non-negative unique numbers whose sum is equal to k
 * For Example. {1,3,4,5,6} and k=9, then {3,6} and {4,5}
 *
 */
public class FindAllPairsIfSumToK {

    public List<Pair> findAllPairsWhoseSumIsK(int[] inputArray, int k) {

        Set<Integer> tempSet = new HashSet<>();
        List<Pair> pairs = new ArrayList<>();

        for(int i=0;i<inputArray.length;i++) {
            tempSet.add(inputArray[i]);
        }

        for(int i=0;i<inputArray.length;i++) {
            if((2*inputArray[i] != k) && tempSet.contains(k-inputArray[i])) {
                pairs.add(new Pair(inputArray[i], k-inputArray[i]));
            }
        }

        return pairs;
    }

    public static void main(String[] args) {

        FindAllPairsIfSumToK findAllPairsIfSumToK = new FindAllPairsIfSumToK();

        //Test 1
        int[] inputArray1 = {1, 3, 5, 7, 9, 11};
        List<Pair> output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
        assert (output1.size() == 2) ;

        //Test 2
        int[] inputArray2 = {1, 2, 5, 6, 12, 15, 16};
        List<Pair> output2 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray2, 17);
        assert (output2.size() == 3) ;
    }

    class Pair{
        int value1,value2;

        public Pair(int value1, int value2) {
            this.value1 = value1;
            this.value2 = value2;
        }
    }
}

我用Google搜索了它,但是大多数人都在谈论测试Web应用程序。 这是测试程序的正确方法吗?还是请您指导?

2 个答案:

答案 0 :(得分:7)

对于Java,有一个称为JUnit的单元测试库。根据您的IDE,您将不得不以其他方式包括它,但这是基础知识。如果使用JUnit,则可以编写多个测试用例,这比在主函数中包含测试用例更可取,因为这样可以更好地组织测试。

如果使用eclipse,只需右键单击源文件夹并选择:new-> other-> JUnitTestCase来生成新的JUnit TestCase,然后选择一个JUnit版本。

在JUnitTestCase中,所有测试都是用@Test注释的函数,并使用assertEqals,assertArrayEquals,assertNonNull等检查结果。如果创建新的源文件夹(称为test或类似名称)并创建与程序中的程序包结构相同,并在与要测试的类相同的程序包中创建测试,您可以访问程序包私有和受保护的成员,但是测试仍与主程序分开组织。

使用JUnit,您的测试将如下所示:

@Test
public void Test_FindAllPairsIfSumToK(){
    FindAllPairsIfSumToK findAllPairsIfSumToK = new FindAllPairsIfSumToK();
    int[] inputArray1 = {1, 3, 5, 7, 9, 11};
    List<Pair> output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
    assertEquals (2, output1.size());
    //maybe check if the correct ones are output:
    output1.foreach(p -> assertEquals(10, p.value1 + p.value2));
}

另外,您可能希望将成对的变量声明为public final int,以便可以从程序包外部对其进行访问,并且在创建Pair对象后不能对其进行更改。

答案 1 :(得分:2)

可以通过使用-ea或-enableassertions切换到Java来运行程序来测试此示例。

只需更改条件即可,即==到!=,因为assert在与引发异常的条件相反的条件下工作。

请检查: question