簡體   English   中英

測試Java程序的最佳方法

[英]Best way to test Java Program

我想測試以下Java程序。

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;
        }
    }
}

這就是我試圖測試程序的方式

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

我用Google搜索了它,但是大多數人都在談論測試Web應用程序。 這是測試程序的正確方法嗎? 還是請您指導?

對於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));
}

另外,您可能希望將pair中的變量聲明為public final int ,以便可以從包外部訪問它們,並且在創建Pair對象后不能更改它們。

可以通過使用-ea或-enableassertions切換到java來運行程序來測試此示例。

唯一需要更改的是條件==到!=,因為assert在與引發異常的條件相反的條件下工作。

請檢查: 問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM