JUnit常用注解 JUnit是 Java平台最常用的测试框架 。
本文重点阐述JUnit4版本的@Before、@After、@BeforeClass、@AfterClass四个注解。
JUnit4,JUnit5注解对比
JUnit4
JUnit5
功能
@BeforeClass
@BeforeAll
在当前类的所有测试方法 之前执行。注解在【静态方法】上。
@AfterClass
@AfterAll
在当前类中的所有测试方法 之后执行。注解在【静态方法】上。
@Before
@BeforeEach
在每个测试方法 之前执行。注解在【非静态方法】上。
@After
@AfterEach
在每个测试方法 之后执行。注解在【非静态方法】上。
为什么 JUnit中@BeforeClass和@AfterClass标注的方法必须是static的 ?
其实和JUnit的运行机制有关:
在JUnit中:每运行一个@Test方法,就会为该测试类新建一个新的实例。所以@BeforeClass和@AfterClass必须是static的,因为运行他们的时候,测试类还没有实例化。
这种设计有助于提高测试方法之间的独立性,因为每个@Test执行的时候,都新建了一个实例,这样的话,可以避免测试方法之间重用各个@Test方法里面的变量值。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import org.junit.Test;public class JUintDemo { int i = 2 ; @Test public void test1 () { int i = 1 ; System.out.println("test1 i=" + i); } @Test public void test2 () { System.out.println("test2 i=" + i); } }
代码示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import org.junit.*;public class JunitTest { @BeforeClass public static void beforeClass () { System.out.println("before class:begin this class================" ); } @AfterClass public static void afterClass () { System.out.println("after class:end this class=================" ); } @Before public void before () { System.out.println("before:begin test" ); } @After public void after () { System.out.println("after:end test" ); } @Test public void Test () { System.out.println("[this is a test!]" ); } @Test public void Test2 () { System.out.println("[this is another test!!!!!]" ); } }
执行整个JunitTest文件,输出结果:
1 2 3 4 5 6 7 8 before class:begin this class================ before:begin test [this is a test!] after:end test before:begin test [this is another test!!!!!] after:end test after class:end this class=================
小结 一整个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每一个单独的测试方法的调用顺序为:
@Before -> @Test -> @After;