JUnitのパラメトリックテストとグループテストの使用


JUnitのパラメトリックテストとグループテストの簡単な使用

パラメトリックテスト


int a 0,a 1,a 2の代わりに配列が置換されているように、加算をテストするときにassertEquals(3.0,h.add(1,2),0.1).変数を宣言することに相当し、100個をテストするにはどうすればいいですか.
したがって、パラメトリックテストがあり、1つのCollectionを使用してすべてのデータを収集します.加算するたびにテストに必要ないくつかのデータが1つのグループを構成し、nつのグループがCollectionを構成します.
そしてJUnitの使い方の要求に従って、ユニットテストクラスを書き出します.△サボって、テストされたビジネスクラスXを書きたくありません.次の例では、テストする方法として、1つの数が奇数かどうかを判断します.
package myTest.param;
import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)//1. 
public class ParametTestUnit {
    private int input;
    private boolean expected;//expected result
    /**
     * 2.public  
     */
    public ParametTestUnit(int input,boolean expected ) {
        this.input = input;
        this.expected = expected;
    }

    /**
     * 3. @Parameterized.Parameters 
     * public static Collection xxx()
     */
    @Parameterized.Parameters
    public static Collection data() {
        return Arrays.asList(new Object[][] {
            { 1, true },
            { 3, true },//
            { 6, false },
            { 11, true },
            { 22, false },
            { 23, true }
        });
    }

    /**
     * 4.JUnit 
     */
    @Test
    public void testOdd() {
        System.out.println("Parameterized Number is : " + input);
        assertEquals(expected, input%2!=0);
    }
}
このユニットのテストクラスの作成は完了しましたが、BlueJでは直接実行できません(サポートされていません?)自分でMainを書いてください.
package myTest.param;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class Main {
   public static void go() {
      Result result = JUnitCore.runClasses(ParametTestUnit.class);
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
      System.out.println(result.wasSuccessful());
   }
}
実行結果:
Parameterized Number is : 1 Parameterized Number is : 3 Parameterized Number is : 6 Parameterized Number is : 11 Parameterized Number is : 22 Parameterized Number is : 23 true
ここで、あるデータを{11,true}から{10,true}に変更すると、実行結果:Parameterized Number is:1 Parameterized Number is:3 Parameterized Number is:6 Parameterized Number is:10 Parameterized Number is:22 Parameterized Number is:23 testOdd[3](myTest.param.ParametTestUnit):expected:but was:false
3番目のデータ(0ベース)に問題があることを示します.

グループテスト


多くのユニットテストクラスがテストを必要とし、Suiteを構成し、みんなでテストします.たとえば、2つのユニットテストクラスが新しく書かれました.
package myTest.param;
import static org.junit.Assert.assertEquals;
public class AddUnit1 {
    @org.junit.Test
    public void testAdd() {	
        System.out.println("Inside AddUnit1");    
        assertEquals(3, 1+2);     
    }
}
package myTest.param;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
public class AddUnit2 {
    @org.junit.Test
    public void testSth() {	
        System.out.println("Inside AddUnit2");    
        assertThat("Zero is one", 0, is(not(1))); // passes   
        assertThat("Zero is one", 0, is(1)); //fail
    }
}
それらをSuiteに構成するには、バンドルコードを書く必要があります.明確にするために、クラスを単独で使用します.
package myTest.param;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
   AddUnit1.class,
   AddUnit2.class,
   //ParametTestUnit.class
})
public class SuiteUnit {}
やはり上のMainを使ってrunClasses(SuiteUnit.class)に変更します.実行結果:
Inside AddUnit1.testAdd()
Inside AddUnit2.testSth()
testSth(myTest.param.AddUnit2): Zero is one
Expected: is <1>
     got: <0>
false
ParametTestUnit.classのテストも加わった.実行結果:
Inside AddUnit1.testAdd() Inside AddUnit2.testSth() Parameterized Number is : 1 Parameterized Number is : 3 Parameterized Number is : 6 Parameterized Number is : 10 Parameterized Number is : 22 Parameterized Number is : 23 testSth(myTest.param.AddUnit2): Zero is one Expected: is <1>      got: <0> testOdd[3](myTest.param.ParametTestUnit): expected: but was: false