Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69183
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-27 15:04
个人简介

记录,分享

文章分类

全部博文(43)

文章存档

2017年(24)

2015年(1)

2014年(18)

我的朋友

分类: Java

2017-03-16 12:21:10

在Junit4中,有@BeforeClass,@AfterClass,@Before,@After,再加上java的静态初始化器(static{})、非静态初始化器({}),所以如果有继承,就会比较麻烦。

一. 基本执行顺序如下:

1. 父类的静态初始化器
2. 父类的@BeforeClass
3. 子类的静态初始化器
4. 子类的@BeforeClass
5. 父类的非静态初始化器
6. 子类的非静态初始化器
7. 父类的@Before
8. 子类的@Before
9. 执行测试@Test
10. 子类的@After
11. 父类的@After
12. 子类的@ AfterClass
13. 父类的@ AfterClass

注意:如果方法名称相同,也就是如果是@override了父类的方法,那么父类的方法就不会再起作用。

二. 示例

1. 父类

 

  1. public class ChildTest extends ParentTest{
  2.  
  3. //静态初始化
  4. static {
  5. System.out.println("3. Child static{}");
  6. }
  7.  
  8. //非静态初始化
  9. {
  10. System.out.println("6. Child {}");
  11. }
  12.  
  13. @BeforeClass
  14. public static void beforeChild() {
  15. System.out.println("4. Child Before Class!");
  16. }
  17.  
  18. @AfterClass
  19. public static void afterChild() {
  20. System.out.println("12. Child After Class!");
  21. }
  22.  
  23. @Before
  24. public void befChild() {
  25. System.out.println("8. Child @Before!");
  26. }
  27.  
  28. @After
  29. public void aftChild() {
  30. System.out.println("10. Child @After!");
  31. }
  32.  
  33. @Test
  34. public void test1() {
  35. System.out.println("9.1 Child @Test1! //执行测试");
  36. }
  37.  
  38. @Test
  39. public void test2() {
  40. System.out.println("9.2 Child @Test2! //执行测试");
  41. }
  42. }

 

2. 子类

 

  1. public class ParentTest {
  2.  
  3. //静态初始化
  4. static {
  5. System.out.println("1. Parent static{}");
  6. }
  7.  
  8. //非静态初始化
  9. {
  10. System.out.println("5. Parent {}");
  11. }
  12.  
  13. @BeforeClass
  14. public static void before() {
  15. System.out.println("2. Parent Before Class!");
  16. }
  17.  
  18. @AfterClass
  19. public static void after() {
  20. System.out.println("13. Parent After Class!");
  21. }
  22.  
  23. @Before
  24. public void bef() {
  25. System.out.println("7. Parent @Before!");
  26. }
  27.  
  28. @After
  29. public void aft() {
  30. System.out.println("11. Parent @After!");
  31. }
  32. }

 

3. 输出结果

//静态区
1.  Parent static{}
2.  Parent Before Class!
3.  Child  static{}
4.  Child  Before Class!

5.  Parent {}
6.  Child  {}
7.  Parent @Before!
8.  Child  @Before!
9.1 Child  @Test1!       //执行测试
10. Child  @After!
11. Parent @After!

5.  Parent {}
6.  Child  {}
7.  Parent @Before!
8.  Child  @Before!
9.2 Child  @Test2!       //执行测试
10. Child  @After!
11. Parent @After!

//静态区
12. Child  After Class!
13. Parent After Class!

希望对大家能有所帮助。

阅读(2674) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~