Junit Test

4872 ワード

@Test public void method()
テストするメソッドを定義します
@Before public void method()
各テストの前に実行される方法です.この方法は、入力データを読み込み、クラスを初期化するなど、いくつかのテスト環境の準備によく使用されます.
@After public void method()
@Beforeと対応し、クリーンアップ作業を行う
@BeforeClass public void method()
すべてのテストが開始される前に実行されます.このメソッドはクラスが実行されるときに実行され、一度だけ実行されるので、データベースのリンクのように、すべてのメソッドが作業に依存することがよくあります.
@AfterClass public void method()
@BeforeClassに対応し、クラスレベルのクリーンアップを行います.
@Ignore
方法が無視されていることを示します.この方法は非常に実用的で、あなたの方法が修正されたことをたとえていますが、対応するテスト方法がまだ一致して修正されていないときは、このテスト方法を無視することができます.
@Test(expected=IllegalArgumentException.class)
試験方法に対応する異常が投げ出されたかどうかを確認する
@Test(timeout=100)
メソッドの実行にかかるミリ秒数>100 MSの場合、メソッドは失敗します.
MathDemoクラスのdivメソッドを変更するには、次のようにします.
public int div(int a, int b) {
		if(b == 0)
			throw new ArithmeticException(" ");
		return a / b;
	}

テスト例は次のとおりです.
package com.reiyen.junit;

import static org.junit.Assert.assertEquals;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class MathDemoTest2 {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("set up.......");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("gone........");
	}

	@Test
	public void testAdd() {
		assertEquals("1 2", 1 ,2);
	}

	@Test(expected=ArithmeticException.class)
	public void testDiv(){
		assertEquals(1, new MathDemo().div(1,0));
	}
}

このテストケースを実行すると、コンソールから次の情報が印刷されます.
set up.......gone........
試験方法testAdd()が不合格で、java.lang.AssertionError:1が2 expectedに等しくない:<1>but was:<2>
試験方法testDiv()は、除数が0の場合、ArithmeticExceptionが放出されるため、合格した.変更後:
@Test(expected=ArithmeticException.class)
	public void testDiv(){
		assertEquals(1, new MathDemo().div(1,1));
	}

 
失敗すると、javaという異常が印刷される.lang.AssertionError: Expected exception: java.lang.ArithmeticException
JUnit 4では、各テストメソッドが実行される前にフィールドを初期化し、環境を構成できます.ただし、これらの操作を完了する方法をsetup()と呼ぶ必要はありません.@Beforeコメントで示すだけで、以下のようになります.
@Before
protected void initialize() {
	System.setErr(new PrintStream(new ByteArrayOutputStream()));
	inputDir = new File("data");
	inputDir = new File(inputDir, "xslt");
	inputDir = new File(inputDir, "input");
} 

各テストの前に実行される複数のメソッドについて、@Beforeを使用してコメントすることもできます.
@Before 
protected void findTestDataDirectory() {
	inputDir = new File("data");
	inputDir = new File(inputDir, "xslt");
	inputDir = new File(inputDir, "input");
}

@Before 
protected void redirectStderr() {
	System.setErr(new PrintStream(new ByteArrayOutputStream()));
} 

JUnit 3のtearDown()メソッドについては、JUnit 4でより自然な名前を付けて@Afterでコメントできます.
@After 
protected void disposeDocument() {
 doc = null;
 System.gc();
}

@Beforeと同様に、各テストの後に実行される複数のパージ方法についても@Afterでコメントできます.最後に、スーパークラスで初期化メソッドとパージメソッドを明示的に呼び出す必要はありません.上書きされない限り、テスト実行プログラムは必要に応じて自動的にこれらのメソッドを呼び出します.スーパークラスの@Beforeメソッドは、サブクラスの@Beforeメソッドの前に呼び出されます(これは、コンストラクション関数呼び出しの順序を反映します).Afterメソッドは逆方向に実行されます:サブクラスのメソッドはスーパークラスのメソッドの前に呼び出されます.そうでなければ,複数の@Beforeまたは@Afterメソッドの相対順序は保証されない.
タイムテスト
性能テストはユニットテストの中で最も頭が痛い問題で、JUnit 4もこの問題を完全に解決していないので、JUNIT 4のテスト方法に時間パラメータを追加することができます.テスト時間がパラメータを超えた場合、テストに失敗します.次のように、テスト時間が0.5秒を超えると、このテストは失敗します.
@Test(timeout=500) 
public void retrieveAllElementsInDocument() 
{ 
	doc.query("//*");
 }

ベンチマーク性能テストに加えて、時間テストはネットワークテストにも役立ちます.リモートのホストやデータが落ちたり遅くなったりした場合、ここでブロックすることなく、このテストをスキップすることができます.良いテストセットは、いくつかの変更をした後、すぐに何度も実行することができます.1日に10回も実行することができます.タイムアウトを設定すると、テストがより速く実行されます.次の例では、分析http://www.ibiblio.org/xmlの時間が2秒を超えると、テストに失敗する.
@Test(timeout=2000) 
public void remoteBaseRelativeResolutionWithDirectory() throws IOException, ParsingException 
{ 
	builder.build("http://www.ibiblio.org/xml"); 
} 

無視する必要があるテスト
@lgnore:メタデータタグのテスト方法は、テストでは無視されます.テストの方法がまだ実装されていない場合、またはテストの方法が古くなっている場合、または何らかの条件でこの方法をテストすることができます(例えば、データベース結合が必要であり、ローカルテストの場合、データベースは接続されていません).このラベルを使用して、この方法を表示します.同時に、このラベルにStringのパラメータを渡して、なぜこのテスト方法を無視したのかを示すことができます.たとえば、@lgnore(「このメソッドはまだ実装されていません」)は、実行時にメソッドが実装されていないことのみが報告され、テストメソッドは実行されません.次のようになります.
@Test
@Ignore
public void test1(){
.............
}