一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一个测试方法的调用顺序为:
@Before -> @Test -> @After;
代码示例:
1 /** 2 * @author GrimMjx 3 */ 4 public class JunitTest { 5 6 @BeforeClass 7 public static void beforeClass(){ 8 System.out.println("BeforeClass"); 9 } 10 11 @Before 12 public void before(){ 13 System.out.println("Before"); 14 } 15 16 @Test 17 public void test(){ 18 System.out.println("Test"); 19 } 20 21 @Test 22 public void test2(){ 23 System.out.println("Test2"); 24 } 25 26 @After 27 public void after(){ 28 System.out.println("After"); 29 } 30 31 @AfterClass 32 public static void afterClass(){ 33 System.out.println("AfterClass"); 34 } 35 }
执行结果:
BeforeClass
Before
Test
After
Before
Test2
After
AfterClass
@BeforeClass、@AfterClass和@Before、@After的对比
1.@BeforeClass 和 @AfterClass 对于那些比较“昂贵”的资源的分配或者释放来说是很有效的,因为他们只会在类中被执行一次。相比之下对于那些需要在每次运行之前都要初始化或者在运行之后 都需要被清理的资源来说使用@Before和@After同样是一个比较明智的选择;
2.如果类里面可以有多个注解过@Before和@After的方法,它们的执行顺序是未知的;
3.@BeforeClass @AfterClass注解是junit提供的另外的两个注解,必须设置在public 静态方法之上,表示在class加载之前执行,这样设置的方法只会执行一次,而@Before @After则会再每次test之前/之后执行;
4.在JUnit4中,如果测试类继承了TestCase类,那么所有的Annotation都不会起作用。