springboot项目工程单元测试如何搭建
1、添加Maven依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
2.约定
单元测试代码写在src/test/java目录下
单元测试类命名为*Test,前缀为要测试的类名
3、创建一个公共父类,用于规定一些公共配置(在SpringBoot目录中的test包中创建)
@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseControllerTest {
@Autowired
public WebApplicationContext wac;
public MockMvc mvc;
public MockHttpSession session;
public Random random = new Random();
@Before
public void setupMockMvc(){
mvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象
session = new MockHttpSession();
session.setAttribute("user","user"); //拦截器那边会判断用户是否登录,所以这里注入一个用户
}
}
4、在test包右键,设置为测试资源根目录
5、在需要创建单元测试的类上,右键
Superclass
:就是第二步创建的公共测试父类。
Destination package
: 设置了第三步后,IDEA会自动找到对应的测试目录。
下面的Member
可以把需要进行单元测试的类勾选上,会自动创建方法。
6、创建单元测试方法。(POST、GET)
public class UserControllerTest extends BaseControllerTest {
//此URL对应你的请求地址
private String url = "/user/";
//POST 设置参数
@Test
public void addUserType() {
try {
UserReq req = new UserReq();
req.setUserCode("TestLiTong");
req.setUserName("TestLiTong");
req.setCreateRemark("TestLiTong");
req.setCreateUname("LT");
String requestJson = JSONObject.toJSONString(req);
//在这边的URL对应相应的接口
mvc.perform(MockMvcRequestBuilders.post(url+"add")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.content(requestJson)
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print());
} catch (Exception e) {
e.printStackTrace();
//出异常就报错
fail();
}
}
//GET 设置参数
@Test
public void get() throws Exception {
try{
//在这边的URL对应相应的接口
mvc.perform(MockMvcRequestBuilders.get(url+"get")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON_UTF8)
.param("id","20")
.param("userCode","TestLiTong")
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print());
} catch (Exception e) {
e.printStackTrace();
//出异常就报错
fail();
}
}
}
7、运行单元测试
三种方法:
2、点击方法名左边的绿色三角。
3、右键Test类(运行当前类所有方法)
注意:运行test的时候报这个异常
org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;
解决办法
是Junit版本问题
pom.xml引入的是
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
但是程序视图采用Junit5运行,所以报错
将pom.xml里面的
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
</dependency>
删除就好用了
亲测有用哦