天天看點

JUnit4注解基本介紹

@After

If you allocate external resources in a Before method you need to release them after the test runs.Annotating a public void method with @After causes that method to be run after the Test method. All @After methods are guaranteed to run even if a Before or Test method throws an exception. The @After methods declared in superclasses will be run after those of the current class. 

如果在@Before注解方法中配置設定了額外的資源,那麼在測試執行完後,需要釋放配置設定的資源。

使用@After注解一個public void方法會使該方法在@Test注解方法執行後被執行

即使在@Before注解方法、@Test注解方法中抛出了異常,所有的@After注解方法依然會被執行,見示例

父類中的@After注解方法會在子類@After注解方法執行後被執行

public class MathTest {
	@Before
	public void setUp() throws Exception {
		throw new Exception();
	}

	@Test
	public void testAdd() {
		Math m = new Math();
		assertTrue(m.add(1, 1) == 2);
	}
	
	@After
	public void tearDown() throws Exception {
		System.out.println("after");
	}
}
           
after
           
JUnit4注解基本介紹

@AfterClass

If you allocate expensive external resources in a Before Class method you need to release them after all the tests in the class have run. Annotating a public static void method with @AfterClass causes that method to be run after all the tests in the class have been run. All @AfterClass methods are guaranteed to run even if a Before Class method throws an exception.The @AfterClass methods declared in superclasses will be run after those of thecurrent class.

如果在@BeforeClass注解方法中配置設定了代價高昂的額外的資源,那麼在測試類中的所有測試方法執行完後,需要釋放配置設定的資源。

使用@AfterClass注解一個public static void方法會使該方法在測試類中的所有測試方法執行完後被執行

即使在@BeforeClass注解方法中抛出了異常,所有的@AfterClass注解方法依然會被執行

父類中的@AfterClass注解方法會在子類@AfterClass注解方法執行後被執行

@Before

When writing tests, it is common to find that several tests need similar objects created before they can run. Annotating a public void method with @Before causes that method to be run before the Test method. The @Before methods of superclasses will be run before those of the current class. No other ordering is defined.

當編寫測試方法時,經常會發現一些方法在執行前需要建立相同的對象

使用@Before注解一個public void 方法會使該方法在@Test注解方法被執行前執行(那麼就可以在該方法中建立相同的對象)

父類的@Before注解方法會在子類的@Before注解方法執行前執行

@BeforeClass

Sometimes several tests need to share computationally expensive setup (like logging into a database). While this can compromise the independence of tests, sometimes it is a necessary optimization.Annotating a public static void no-arg method with @BeforeClass causes it to be run once before any of the test methods in the class. The @BeforeClass methods of superclasses will be run before those the current class.

有些時候,一些測試需要共享代價高昂的步驟(如資料庫登入),這會破壞測試獨立性,通常是需要優化的

使用@BeforeClass注解一個public static void 方法,并且該方法不帶任何參數,會使該方法在所有測試方法被執行前執行一次,并且隻執行一次

父類的@BeforeClass注解方法會在子類的@BeforeClass注解方法執行前執行

@Ignore

Sometimes you want to temporarily disable a test or a group of tests. Methods annotated with Test that are also annotated with @Ignore will not be executed as tests. Also, you can annotate a class containing test methods with @Ignore and none of the containing tests will be executed. Native JUnit 4 test runners should report the number of ignored tests along with the number of tests that ran and the number of tests that failed.

對包含測試類的類或@Test注解方法使用@Ignore注解将使被注解的類或方法不會被當做測試執行

JUnit執行結果中會報告被忽略的測試數

public class MathTest {
	@Ignore("do not test")
	@Test
	public void testAdd() {
		Math m = new Math();
		assertTrue(m.add(1, 1) == 2);
	}
}
           
@Ignore
public class MathTest {
	@Test
	public void testAdd() {
		Math m = new Math();
		assertTrue(m.add(1, 1) == 2);
	}
}
           

執行結果相同:

JUnit4注解基本介紹

@Test

The Test annotation tells JUnit that the public void method to which it is attached can be run as a test case. To run the method, JUnit first constructs a fresh instance of the class then invokes the annotated method. Any exceptions thrown by the test will be reported by JUnit as a failure. If no exceptions are thrown, the test is assumed to have succeeded.

The Test annotation supports two optional parameters. 

The first, expected,declares that a test method should throw an exception. If it doesn't throw an exception or if it throws a different exception than the one declared, the test fails. 

The second optional parameter, timeout, causes a test to fail if it takes longer than a specified amount of clock time (measured in milliseconds). 

@Test注解的public void方法将會被當做測試用例

JUnit每次都會建立一個新的測試執行個體,然後調用@Test注解方法

任何異常的抛出都會認為測試失敗

@Test注解提供2個參數:

1,“expected”,定義測試方法應該抛出的異常,如果測試方法沒有抛出異常或者抛出了一個不同的異常,測試失敗

2,“timeout”,如果測試運作時間長于該定義時間,測試失敗(機關為毫秒)

public class MathTest {
	@Test(expected=Exception.class)
	public void testAdd() throws Exception{
		throw new Exception();
	}
}
           
JUnit4注解基本介紹
public class MathTest {
	@Test(timeout=5000)
	public void testAdd() {
		for(;;){
			
		}
	}
}
           
JUnit4注解基本介紹

繼續閱讀