針對不同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));
}
}

留言列表
