Junit 注解说明
- @BeforeClass: 针对所有测试方法, 只会执行一次且方法必被
static
关键词修饰 - @Before: 每个方法都会执行一次, 用于初始化信息
- @Test: 测试方法
- @Test(expected = NullPointerException.class): 用来指示期望抛出的异常类型。 抛出指定的异常类型,则测试通过; 否则测试失败
- @Test(timeout = 2000): 测试方法执行的超时时间,
单位: ms
。 当测试方法的时间超过这个时间值时测试就会失败 - @After: 针对所有测试方法, 只会执行一次且方法必被
static
关键词修饰 - @AfterClass: 针对所有测试方法, 只会执行一次且方法必被
static
关键词修饰 - @Ignore: 忽略的测试方法
Junit4 和 Junit5 注解对比
特性 | Junit 4 | Junit 5 |
在当前类的所有测试方法之前执行。注解在静态方法上。此方法可以包含一些初始化代码。 | @BeforeClass | @BeforeAll |
在当前类中的所有测试方法之后执行。注解在静态方法上。此方法可以包含一些清理代码。 | @AfterClass | @AfterAll |
在每个测试方法之前执行。注解在非静态方法上。可以重新初始化测试方法所需要使用的类的某些属性。 | @Before | @BeforeEach |
在每个测试方法之后执行。注解在非静态方法上。可以回滚测试方法引起的数据库修改。 | @After | @AfterEach |
执行顺序
一个测试方法
@BeforeClass -> @Before -> @Test -> @After
-> @AfterClass
两个测试方法
@BeforeClass -> @Before -> @Test -> @After
-> @Before -> @Test -> @After
-> @AfterClass
案例验证
public class App {
@Test
@Ignore
public void contextLoads() {
System.out.println();
System.out.println("----------------------------");
System.out.println("ignore test...");
System.out.println("----------------------------");
System.out.println();
}
@Test
public void doJob1() {
System.out.println("----------------------------");
System.out.println("doJob_1");
System.out.println("----------------------------");
}
@Test(expected = NullPointerException.class)
public void doJob2() {
System.out.println("----------------------------");
System.out.println("doJob_2");
System.out.println("----------------------------");
throw new NullPointerException("nullPointer exception");
}
@Test
public void doJob3() {
System.out.println("----------------------------");
System.out.println("doJob_3");
System.out.println("----------------------------");
throw new NullPointerException("nullPointer exception");
}
@Before
public void before() {
System.out.println();
System.out.println("Before");
}
@BeforeClass
public static void beforeClass() {
System.out.println("BeforeClass");
}
@AfterClass
public static void afterClass() {
System.out.println("AfterClass");
}
@After
public void after() {
System.out.println("After");
System.out.println();
}
}
程序运行输出
BeforeClass
Before
----------------------------
doJob_1
----------------------------
After
Before
----------------------------
doJob_2
----------------------------
After
Before
----------------------------
doJob_3
----------------------------
After
java.lang.NullPointerException: nullPointer exception
at com.xiwei.App.doJob3(App.java:46)
Test ignored.
AfterClass
MockMvc案例
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import javax.annotation.Resource;
// https://zhuanlan.zhihu.com/p/98074553
// https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html#spring-mvc-test-framework
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@Slf4j
class ApplicationTests {
private MockMvc mvc;
@Resource
private WebApplicationContext webApplicationContext;
@BeforeEach
public void setUp() throws Exception {
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void send() throws Exception {
ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.get("/test/query").accept(MediaType.ALL));
MvcResult mvcResult = resultActions.andReturn();
String contentAsString = mvcResult.getResponse().getContentAsString();
log.info("contentAsString={}", contentAsString);
}
}