針對不同Annotation提供了一些說明

@BeforeClass :- Run only 1 time before all the test cases of class. Can be used to initialize resources.

@AfterClass :- Run only 1 time after all the test cases of class. Can be used to clean up the resources.

@Before :- Run annotated method every time individual test case is executed but run before the test case.

@After :- Run annotated method every time individual test case is executed but run after the test case

@BeforeClass和@AfterClass的method需要static。

MathCacTest1.java

import static org.junit.Assert.*;

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


public class MathCacTest1 {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("@BeforeClass setUpBeforeClass()") ;
	}
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("@AfterClass tearDownAfterClass()") ;
	}
	@Before
	public void setUp() throws Exception {
		System.out.println("@Before setUp()") ;
	}
	@After
	public void tearDown() throws Exception {
		System.out.println("@After tearDown()") ;
	}
	@Test
	public void test() {
		System.out.println("@Test test()") ;
	}
	@Test
	public void test1() {
		System.out.println("@Test test1()") ;
	}
}

顯示結果如下:

@BeforeClass setUpBeforeClass()

@Before setUp()

@Test test()

@After tearDown()

@Before setUp()

@Test test1()

@After tearDown()

@AfterClass tearDownAfterClass()

加入@Ignore後,則不會跑此測試程式

@Ignore("Not ready to run")
@Test
public void test1() {
	System.out.println("@Test test1()") ;
}

加入@Test(timeout = 1000)後,可以針對程式跑的時間設定,超過1000毫秒後程式會丟出Execption,如下所示(無窮迴圈)

@Test(timeout = 1000)  
public void infinity() {  
	while (true);  
}  

加入@Test(expected = ArithmeticException.class)若為此Exception則Junit會by pass,否則會跳出java.lang.ArithmeticException: / by zero的訊息。

@Test(expected = ArithmeticException.class)  
public void divisionWithException() {  
	int i = 100/0;
}

如果想要不同組合的單元測試可以利用@RunWith和@Suite

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
	MathCacTest1.class,
	MathCacTest2.class
})

public class JunitTestWithSuite {
}

跑出的結果如下所示:

@BeforeClass setUpBeforeClass()

@Before setUp()

@Test test()

@After tearDown()

@Before setUp()

@Test test1()

@After tearDown()

@AfterClass tearDownAfterClass()

MathCacTest2 @BeforeClass setUpBeforeClass()

MathCacTest2 @Before setUp()

MathCacTest2 @Test test()

MathCacTest2 @After tearDown()

MathCacTest2 @Before setUp()

MathCacTest2 @Test test1()

MathCacTest2 @After tearDown()

MathCacTest2 @AfterClass tearDownAfterClass()

若要測試多組參數的情況下Junit提供了@Parameters的應用

MathCacParameterTest.java

在@Parameters後name預設是index,:後面是nameString(add),{0}代表的是第0個欄位,{1}代表的是第1個欄位,以下依此類推,透過constructor的方式可以測試多組參數。

import static org.junit.Assert.*;

import java.util.Arrays;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(value = Parameterized.class)
public class MathCacParameterTest {
	
	private int num1 ;
	private int num2 ;
	private int expectedValue ;

	public MathCacParameterTest(int num1,int num2, int expectedValue){
		this.num1=num1 ;
		this.num2=num2 ;
		this.expectedValue=expectedValue;
	}
	//Declares parameters here
	@Parameters(name = "{index}: add({0}+{1})={2}")
	public static Iterable<Object[]> data1() {
		return Arrays.asList(new Object[][] { 
			{ 3, 5, 8 }, 
			{ 6, 4, 10 }, 
			{ 6, 2, 9 }, //wrong
			{ 1, 1, 2 } 
		});
	}
	@Test
	public void test_add() {	
		assertEquals(expectedValue,new MathCac().add(num1, num2));
	}
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Codeless 的頭像
    Codeless

    Codeless的部落格

    Codeless 發表在 痞客邦 留言(0) 人氣()