JUnit4 中@AfterClass @BeforeClass @after @before的区别对比

时间:2022-03-03 14:46:38

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; 
每一个测试方法的调用顺序为:

@Before -> @Test -> @After;

  1. public class JUnit4Test {
  2. @Before
  3. public void before() {
  4. System.out.println("@Before");
  5. }
  6. @Test
  7. /**
  8. *Mark your test cases with @Test annotations.
  9. *You don’t need to prefix your test cases with “test”.
  10. *tested class does not need to extend from “TestCase” class.
  11. */
  12. public void test() {
  13. System.out.println("@Test");
  14. assertEquals(5 + 5, 10);
  15. }
  16. @Ignore
  17. @Test
  18. public void testIgnore() {
  19. System.out.println("@Ignore");
  20. }
  21. @Test(timeout = 50)
  22. public void testTimeout() {
  23. System.out.println("@Test(timeout = 50)");
  24. assertEquals(5 + 5, 10);
  25. }
  26. @Test(expected = ArithmeticException.class)
  27. public void testExpected() {
  28. System.out.println("@Test(expected = Exception.class)");
  29. throw new ArithmeticException();
  30. }
  31. @After
  32. public void after() {
  33. System.out.println("@After");
  34. }
  35. @BeforeClass
  36. public static void beforeClass() {
  37. System.out.println("@BeforeClass");
  38. };
  39. @AfterClass
  40. public static void afterClass() {
  41. System.out.println("@AfterClass");
  42. };
  43. };

输出结果: 
@BeforeClass 
@Before 
@Test(timeout = 50) 
@After 
@Before 
@Test(expected = Exception.class) 
@After 
@Before 
@Test 
@After 
@AfterClass