0
点赞
收藏
分享

微信扫一扫

Junit测试中 @Before、@After、@BeforeClass以及@AfterClass 的区别


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);
}

}


举报

相关推荐

0 条评论