JUnit4通過注解的方式來識別測試方法。目前支持的主要注解有:
@BeforeClass
全局只會執行一次,而且是第一個運行@Before
在測試方法運行之前運行@Test
測試方法@After
在測試方法運行之后允許@AfterClass
全局只會執行一次,而且是最后一個運行@Ignore
忽略此方法
下面舉一個樣例:
- import org.junit.After;
- import org.junit.AfterClass;
- import org.junit.Assert;
- import org.junit.Before;
- import org.junit.BeforeClass;
- import org.junit.Ignore;
- import org.junit.Test;
- public class Junit4TestCase {
- @BeforeClass
- public static void setUpBeforeClass() {
- System.out.println("Set up before class");
- }
- @Before
- public void setUp() throws Exception {
- System.out.println("Set up");
- }
- @Test
- public void testMathPow() {
- System.out.println("Test Math.pow");
- Assert.assertEquals(4.0, Math.pow(2.0, 2.0), 0.0);
- }
- @Test
- public void testMathMin() {
- System.out.println("Test Math.min");
- Assert.assertEquals(2.0, Math.min(2.0, 4.0), 0.0);
- }
- // 期望此方法拋出NullPointerException異常
- @Test(expected = NullPointerException.class)
- public void testException() {
- System.out.println("Test exception");
- Object obj = null;
- obj.toString();
- }
- // 忽略此測試方法
- @Ignore
- @Test
- public void testMathMax() {
- Assert.fail("沒有實現");
- }
- // 使用“假設”來忽略測試方法
- @Test
- public void testAssume(){
- System.out.println("Test assume");
- // 當假設失敗時,則會停止運行,但這並不會意味測試方法失敗。
- Assume.assumeTrue(false);
- Assert.fail("沒有實現");
- }
- @After
- public void tearDown() throws Exception {
- System.out.println("Tear down");
- }
- @AfterClass
- public static void tearDownAfterClass() {
- System.out.println("Tear down After class");
- }
- }
Junit3的package是junit.framework
,而Junit4是org.junit
。
執行此用例后,控制台會輸出
寫道
Set up before class
Set up
Test Math.pow
Tear down
Set up
Test Math.min
Tear down
Set up
Test exception
Tear down
Set up
Test assume
Tear down
Tear down After class
Set up
Test Math.pow
Tear down
Set up
Test Math.min
Tear down
Set up
Test exception
Tear down
Set up
Test assume
Tear down
Tear down After class
可以看到,執行次序是@BeforeClass
-> @Before
-> @Test
-> @After
-> @Before
-> @Test
-> @After
-> @AfterClass
。@Ignore
會被忽略。