Junit 4特性

4452 ワード

Junit 4の更新バージョンは多く、現在は4.7に更新されています.発生した変化もかなり明らかで、テストをよりよく使うためには、新しい機能を学ぶ必要があります.
総じて言えば、その変化は比較的に多く、以下にいくつかの変化点を列挙します.
1.テストは元のネーミングパターンから注記を変更します.すなわちtestXXXが@Testになります.@Testには追加のプロパティも用意されています.expectedのように、放出される異常を表す.

@Test(expected = NullPointerException.class)
	public void unsupportedDBCheck() {
		throw new NullPointerException();
	}

上記で所望の放出異常が得られたため、試験に合格した.
2.配列比較用Assert.assertArrayEquals
3.スイートテストも注記で置き換え、以下のようにします.
@RunWith(Suite.class)
@SuiteClasses({
	Hello.class,
	TheoryTest.class
})
public class SuiteClassesTest {

}

4.@Ignoreでは、メソッドまたはクラス全体のテストを無視できます.
5.新しい特性-理論メカニズム(Theory)を追加し、この特性は人を惑わすように聞こえ、開発者が最初のテスト用例を定義する段階からパラメータセット(理論的には無限のパラメータ)を通じてコード行為を概括的にまとめることができるようにする役割を果たす.開発者は、コードが実現したい概括的な目的を知っています.理論は、これらの目的を大量の独立したテスト例に翻訳するのではなく、1つの場所でこれらの目的を迅速に指定することができます.使用法は次のとおりです.

@RunWith(Theories.class)
public class TheoryTest {

	@DataPoint public static String name ="theories";
	@DataPoint public static String password = "2009";
	
	@Theory
	public void outNameAndPassword(String name,String password){
		System.out.println("name="+name+" password="+password);
	}
}

出力:
参照
name=theories password=theories
name=theories password=2009
name=2009 password=theories
name=2009 password=2009
すなわち,メソッドのパラメータと定義されたフィールドは,すべての組合せをすべて考慮し,この特性を用いるところは多くないが,確かに役に立つ場合がある.これにより、断言文を1つずつ書く必要がなく、テストデータを1つの場所に集中して管理しやすくなります.
6.新しい特性-仮説機構(Assumption)を提供した.この特性はHamcrestライブラリのクラスを使用する.もともとHamcrestは単独のテストコンポーネントであり、Junitも一部統合されていたが、完全に含まれていなかった.junit独自のJARファイルを使用して、hamcrestパッケージを個別に導入することをお勧めします.
実はhamcrestの機能はかなり強く、理解も非常に簡単で、とても良いコンポーネントです.しかし、参考文書は見つからなかったようです.それはassertThat,assumeThat,assumeNotNullなどの仮定文を提供し、is,not,bothも提供する.and,either..orなどの使い方は、とても柔軟です.次のようになります.

// "yy" "xx"
assertThat("yy", is(not("xx")));
//abcdefg adcd fsd
assertThat("abcdefg",anyOf(containsString("abcd"),containsString("fsd")));

ここでassumeXXXの目的は、この条件が成立したと仮定して、後の文を実行することです.そうしないと、いくつかのテスト方法から飛び出して、他のテストを実行し続けます.次のようになります.
// , this is assume
Assume.assumeThat(4,both(lessThanOrEqualTo(6)).and(greaterThan(3)));
System.out.println("this is assume");

7. @Before,@After,@BeforeClass,@AfterClass.これらの注釈は、@Beforeが各テストメソッドの実行前に1回実行されることを示し、@BeforeClassがクラス全体のテスト前に1回実行されることを示す.ただし,@BeforeClass,@AtferClass注釈の方法は静的でなければならない.
8.Junitは新しいコア運行クラスMaxCoreを提供し、以前のJunit Core運行メカニズムに比べて、このクラスは一連の利点があり、例えばテストしたことのない方法が優先的にテストされ、残りのテストでは、以前のテストに失敗した方法が優先的にテストされ、次に、運行が速いのは運行が遅い方法より優れている.使用法は公式の例のように示されています.

public static class TwoUnEqualTests {
    @Test
    public void slow() throws InterruptedException {
        Thread.sleep(100);
        fail();
    }
    @Test
    public void fast() {
        fail();
    }
}

@Test
public void rememberOldRuns() {
    File maxFile = new File("history.max");
    MaxCore firstMax = MaxCore.storedLocally(maxFile);
    firstMax.run(TwoUnEqualTests.class);

    MaxCore useHistory= MaxCore.storedLocally(maxFile);
    List<Failure> failures= useHistory.run(TwoUnEqualTests.class)
            .getFailures();
    assertEquals("fast", failures.get(0).getDescription().getMethodName());
    assertEquals("slow", failures.get(1).getDescription().getMethodName());
}

もちろんこの代替も相対的で、JUnitCoreを引き続き使うことができます.MaxCoreはJUnitCoreに優先テストなどのルールを追加するだけですが、JUnitCoreを使う必要がある機能もあります.たとえば、eclipseでjunitプラグインを使用しないでユニットテストを実行するには、JUnitCoreが必要です.

public class ObjectToClassTest {

	@Test
	public void ObjectTest(){
		int[] a={1,2};
		int[] b={1,2};
		Assert.assertArrayEquals(a,b);
	}
	public static void main(String[] args){
		JUnitCore.main("com.junit.ObjectToClassTest");
	}
}

もちろんこの方式はクラスに対して,メソッドに制限することはできないが,複数のクラスがあれば,クラスをスペースで区切るだけでよい.
基本的にはJunit 4が含まれています.6前の新しい特性は、後の新しい特性については、専門的な紙面で説明します.