描述: 因为进行单元测试时发现@Before未执行,故留贴在此记录;
原因: JUnit5 需要使用 @BeforeEach 和 @AfterEach;
上码 Controller
package com.sendiyang.xiyeming.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName Controller
* @Description
* @Date 2019/12/13 上午11:16
* @Author Mr.Xi
* @Version 1.0
*/
@RestController
public class TestController {
@RequestMapping("/hello")
public String hello(){
return "hello world!";
}
}
JUnit5测试:(这里引用了里一位大佬的代码)
package com.sendiyang.xiyeming;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
//SpringBoot1.4版本之前用的是SpringJUnit4ClassRunner.class
@RunWith(SpringRunner.class)
//SpringBoot1.4版本之前用的是@SpringApplicationConfiguration(classes = Application.class)
@SpringBootTest
//测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的
@WebAppConfiguration
class XiyemingApplicationTests {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@BeforeEach
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
void contextLoads() throws Exception {
/**
* 1、mockMvc.perform执行一个请求。
* 2、MockMvcRequestBuilders.get("XXX")构造一个请求。
* 3、ResultActions.param添加请求传值
* 4、ResultActions.accept(MediaType.TEXT_HTML_VALUE))设置返回类型
* 5、ResultActions.andExpect添加执行完成后的断言。
* 6、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情
* 比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
* 5、ResultActions.andReturn表示执行完成后返回相应的结果。
*/
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/hello")
//.param("name", "lvgang")
.accept(MediaType.APPLICATION_JSON))
//等同于Assert.assertEquals(200,status);
.andExpect(MockMvcResultMatchers.status().isOk())
//等同于 Assert.assertEquals("hello world!",content);
.andExpect(MockMvcResultMatchers.content().string("hello world!"))
.andDo(MockMvcResultHandlers.print())
.andReturn();
//得到返回代码
int status = mvcResult.getResponse().getStatus();
//得到返回结果
String content = mvcResult.getResponse().getContentAsString();
//断言,判断返回代码是否正确
Assert.assertEquals(200, status);
//断言,判断返回的值是否正确
Assert.assertEquals("hello world!", content);
}
}