參數化測試 Parameterized

JUnit也可以一次接收多個參數進行重複測試,下面validate方法是用來驗證一個數字是否為質數, 我們要輸入很多數字來對validate進行測試。

  • 首先要建立ParameterizedTest建構子,這邊的建構子接受兩個參數,inputNumber為測試的數字,expectedResult為預期結果
  • 接著寫一個static的參數列方法(primeNumbers),在方法上加上@Parameterized.Parameters
  • testPrimeNumberChecker是真正的測試程式,primeNumbers內的參數會依序傳入assertEquals進行測試
  • 例如第一組會傳入2,我們預期的結果是true,因為我們輸入了5組參數,因此test會執行5次
package yan.junit;
import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Parameterized.class)
public class ParameterizedTest {
   private Integer inputNumber;
   private Boolean expectedResult;

   // inputNumber為測試的數字,expectedResult為預期結果
   public ParameterizedTest(Integer inputNumber, Boolean expectedResult) {
      this.inputNumber = inputNumber;
      this.expectedResult = expectedResult;
   }

   // 參數量需與coustructor內的參數量一樣, {2,true} <=> inputNnmber, expectedResult
   @Parameterized.Parameters
   public static Collection<Object[]> primeNumbers() {
      return Arrays.asList(new Object[][] {
         { 2, true },
         { 6, false },
         { 19, true },
         { 22, false },
         { 23, true }
      });
   }

   // 測試程式會執行5次,因為我們輸入了5組參數
   @Test
   public void testPrimeNumberChecker() {
      assertEquals(expectedResult, validate(inputNumber));
   }
   /**
    * 測試一個數字是否為質數
    * @return
    */
   private Boolean validate(final Integer primeNumber) {
          for (int i = 2; i < (primeNumber / 2); i++) {
             if (primeNumber % i == 0) {
                return false;
             }
          }
          return true;
       }
}

測試結果

Parameterized

results matching ""

    No results matching ""