avatar

目录
JUnit常用注解

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方法里面的变量值。

示例:

java
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); //test1 i=1
}

@Test
public void test2() {
System.out.println("test2 i=" + i); //test2 i=2
}
}

代码示例

java
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文件,输出结果:

Code
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;

文章作者: Yang4
文章链接: https://masteryang4.github.io/2020/05/12/JUnit%E5%B8%B8%E7%94%A8%E6%B3%A8%E8%A7%A3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MasterYangBlog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论