Junit 4学習ノート

4230 ワード

JUnit4.xはjava 5の特性(注釈Annotation)の利点を利用して、比3.x使用はより便利で簡単で、簡単な古いバージョンのアップグレードではなく、新しいフレームワークであり、フレームワーク全体の新聞構造は完全に変更されていますが、4.xバージョンは、古いバージョンのテストキットと互換性があります.
利用JUnit 4.xの注記方式テスト
 
import static org.junit.Assert.*;
import hb.util.Calculator;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class TTest {

	private Calculator calculator = new Calculator();
	
	// 
	@BeforeClass
	public static void beforeClass(){
		System.out.println("-----------beforeClass");
	}
	
	// 
	@AfterClass
	public static void afterClass(){
		System.out.println("---------afterClass");
	}
	
	// 
	@Before
	public void before(){
		System.out.println("==============before");
	}
	
	// 
	@After
	public void after(){
		System.out.println("===========after");
	}
	
	@Test
	public void testAdd(){
		int result = calculator.add(3, 6);
		assertEquals(9,result);
		System.out.println("testAdd() is OK");
	}
	
	@Test
	public void testDivision(){
		System.out.println("in test division");
	}
	
	@Ignore  // 
	@Test
	(expected=java.lang.ArithmeticException.class,timeout=100) //timeout 100 , 
    public void testDivide(){
        int z = calculator.subtration(8,2);
    }
}

 
実行結果:
-----------beforeClass
==============before
testAdd() is OK
===========after
==============before
in test division
===========after
---------afterClass

 
結論:@BeforeClass-->@Before-->@Test-->@After-->@AfterClass
 
1、@Ignore:無視した試験方法、表示の意味--一部の方法はまだ完成していないので、今回の試験に参加しない
2、@BeforeClass:すべてのテストについて、すべてのテストメソッドが実行される前に1回実行し、public static voidである必要があります.
 
3、@AfterClass:すべてのテストについて、すべてのテストメソッドの実行が終了した後に1回実行し、public static voidである必要があります.
 
JAVA 5が新しく追加した新しい特性は、importを使ってあるClassの静的membersに入ることができ、主に2つの表現形式があります.
1、特定の静的メンバーを導入する
import static packageName.ClassName.staticMemberName;
2、すべての静的メンバーを導入する
 
import static packageName.ClassName.*;
 
一括処理の学習?
メソッドは「テストスイート」の概念を導入し、JUnitはテストクラスを一括して実行する方法を提供し、テストスイートと呼ばれています.
テストキットの書き方は原則に従う必要があります.
1、テストキットのエントリとして空のクラスを作成し、
2、注釈orgを使用する.junit.runner.RunWithとorg.junit.runners.Suite.SuitClassesはこの空のクラスを修飾します
3、org.junit.runners.Suiteはパラメータとして注記RunWithに渡され、JUnitにこのようなテストのためにスイートドライバを使用して実行するように要求します.
4、このテストキットに入れる必要があるテストクラス構成配列を注記SuiteClassのパラメータとする
5、この空クラスがpublic修飾を使用し、公開されたパラメータを持たない構造関数があることを保証する.
 
//このクラスはUserクラスという方法をテストするためのものです
 
import static org.junit.Assert.*;
import hb.util.User;
import org.junit.Test;

public class TestUser {
	@Test
	public void testGetName(){
		assertEquals(" ", new User().getName());
	}
}

// T 
import hb.util.T;
import static org.junit.Assert.*;
import org.junit.Test;

public class TTest {

	@Test
	public void testAdd(){
		int result = new T().add(5, 3);
		assertEquals(8,result);
	}
}

// TestUser、TTest 
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)  // JUnit 
@SuiteClasses({TestUser.class,TTest.class})// 
public class AllTest {
}

 
コード仕様?
1、ユニットテストのコードは単独のSource Folderの下にあるべきで、つまりsrcと同じレベルである.
2、テストクラスは被テストクラスと統一パッケージ、すなわちsrcと自分で作成したテストfolderディレクトリと同じであるべきである.
3、試験意義のある試験方法名を選択し、ユニット試験方法名はいずれもtest<試験対象方法名>[概要説明]を使用する必要があり、例えばpublic void testDivdeDivisorZero()のように、試験方法の意味が分かりやすい
4、テストの独立性を保つ
5、一時的に実装されていないテストコードに失敗(fail)を投げ出すか、fail(「not yet implemented」)または@Ignore(「not yet implemented」)を使用するなど、無視(ignore)
6、アサーション(assert)メソッドを呼び出すときに失敗の原因を与える