JUnit4 中@AfterClass @BeforeClass @after @before的區別對比
JUnit4使用Java5中的註解(annotation),以下是JUnit4常用的幾個annotation:
@Before:初始化方法 對於每一個測試方法都要執行一次(注意與BeforeClass區別,後者是對於所有方法執行一次)
@After:釋放資源 對於每一個測試方法都要執行一次(注意與AfterClass區別,後者是對於所有方法執行一次)
@Test:測試方法,在這裡可以測試期望異常和超時時間
@Test(expected=ArithmeticException.class)檢查被測方法是否丟擲ArithmeticException異常
@Ignore:忽略的測試方法
@BeforeClass:針對所有測試,只執行一次,且必須為static void
@AfterClass:針對所有測試,只執行一次,且必須為static void
一個JUnit4的單元測試用例執行順序為:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一個測試方法的呼叫順序為:
輸出結果:
@BeforeClass
@Before
@Test(timeout = 50)
@After
@Before
@Test(expected = Exception.class)
@After
@Before
@Test
@After
@AfterClass
@Before:初始化方法 對於每一個測試方法都要執行一次(注意與BeforeClass區別,後者是對於所有方法執行一次)
@After:釋放資源 對於每一個測試方法都要執行一次(注意與AfterClass區別,後者是對於所有方法執行一次)
@Test:測試方法,在這裡可以測試期望異常和超時時間
@Test(expected=ArithmeticException.class)檢查被測方法是否丟擲ArithmeticException異常
@Ignore:忽略的測試方法
@BeforeClass:針對所有測試,只執行一次,且必須為static void
@AfterClass:針對所有測試,只執行一次,且必須為static void
一個JUnit4的單元測試用例執行順序為:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一個測試方法的呼叫順序為:
@Before -> @Test -> @After;
- public class JUnit4Test {
- @Before
- public void before() {
- System.out.println("@Before");
- }
- @Test
- /**
- *Mark your test cases with @Test annotations.
- *You don’t need to prefix your test cases with “test”.
- *tested class does not need to extend from “TestCase” class.
- */
- public void test() {
- System.out.println("@Test");
- assertEquals(5 + 5, 10);
- }
- @Ignore
- @Test
- public void testIgnore() {
- System.out.println("@Ignore");
- }
- @Test(timeout = 50)
- public void testTimeout() {
- System.out.println("@Test(timeout = 50)");
- assertEquals(5 + 5, 10);
- }
- @Test(expected = ArithmeticException.class)
- public void testExpected() {
- System.out.println("@Test(expected = Exception.class)");
- throw new ArithmeticException();
- }
- @After
- public void after() {
- System.out.println("@After");
- }
- @BeforeClass
- public static void beforeClass() {
- System.out.println("@BeforeClass");
- };
- @AfterClass
- public static void afterClass() {
- System.out.println("@AfterClass");
- };
- };
輸出結果:
@BeforeClass
@Before
@Test(timeout = 50)
@After
@Before
@Test(expected = Exception.class)
@After
@Before
@Test
@After
@AfterClass
@BeforeClass and @AfterClass | @Before and @After |
在一個類中只可以出現一次 |
在一個類中可以出現多次,即可以在多個方法的宣告前加上這兩個Annotaion標籤,執行順序不確定 |
方法名不做限制 | 方法名不做限制 |
在類中只執行一次 | 在每個測試方法之前或者之後都會執行一次 |
@BeforeClass父類中標識了該Annotation的方法將會先於當前類中標識了該Annotation的方法執行。 |
@Before父類中標識了該Annotation的方法將會先於當前類中標識了該Annotation的方法執行。 @After父類中標識了該Annotation的方法將會在當前類中標識了該Annotation的方法之後執行 |
必須宣告為public static | 必須宣告為public 並且非static |
所有標識為@AfterClass的方法都一定會被執行,即使在標識為@BeforeClass的方法丟擲異常的的情況下也一樣會。 | 所有標識為@After 的方法都一定會被執行,即使在標識為 @Before 或者 @Test 的方法丟擲異常的的情況下也一樣會。 |
@BeforeClass 和 @AfterClass 對於那些比較“昂貴”的資源的分配或者釋放來說是很有效的,因為他們只會在類中被執行一次。相比之下對於那些需要在每次執行之前都要初始化或者在執行之後 都需要被清理的資源來說使用@Before和@After同樣是一個比較明智的選擇。
相關文章
- Java中單元測試中:@BeforeClass,@Before,@Test,@After,@AfterClass中的問題詳解Java
- jquery中append、prepend, before和after方法的區別jQueryAPP
- 關於Oralce Trigger中before、after的區別
- mysql觸發器案例分析以及before和after的區別MySql觸發器
- css中的:before與:after的簡單使用CSS
- jQuery中empty與html("")的區別對比jQueryHTML
- flask 中的before_request 與 after_requFlask
- css當中:before和:after選擇器CSS
- 瞭解css中偽元素 before和after的用法CSS
- jquery中append()方法與after()方法的區別jQueryAPP
- CSS 巧用 :before和:afterCSS
- CSS巧用:before和:afterCSS
- Spark與MapReduce的對比(區別)Spark
- 使用jiffies的時間比較函式time_after、time_before函式
- css偽元素(before與after)CSS
- 偽元素 before 和 after 初探
- 理解偽元素 :before 和 :after
- [CSS] 偽元素和偽類,::before 和 :before 區別CSS
- Element UI 元件 Dialog 中 before-close 與 close 的區別UI元件
- 對比git rm和rm的使用區別Git
- before-after-hook鉤子函式Hook函式
- MySQL 5.7中sync_binlog引數和半同步中after_commit和after_sync的區別MySqlMIT
- 對於java中的"\"和"/" 區別Java
- 全面對比 Redis 和 Memcached 的 6 點區別Redis
- ::after和::before 要配合content屬性
- mysql匯入匯出指令碼的區別對比MySql指令碼
- Vue與React兩個框架的粗略區別對比VueReact框架
- SOAP和RESTful框架的簡介、對比和區別REST框架
- Vue路由鉤子 afterEach beforeEach區別Vue路由
- CSS-選擇器15-:before與:afterCSS
- js如何控制css偽元素內容(before,after)JSCSS
- css中絕對定位與相對定位的區別CSS
- VUE的兩種跳轉push和replace對比區別Vue
- epic和steam的區別介紹及優劣對比
- css3偽元素選擇器before 和 after 的使用CSSS3
- javascript獲取偽物件before和after定義的內容JavaScript物件
- 小米Max和紅米Pro區別對比評測
- 紅米Pro和小米edge區別對比評測