概述
在日常的开发中,我们一般会定义一个service层,用于实现业务逻辑,并且针对service层会有与之对应的齐全的覆盖率高的单元测试。而对于controller层,一般不怎么做单元测试,因为主要的核心业务逻辑都在service层里,controller层只是做转发,调用service层接口而已。但是还是建议使用单元测试简单的将controller的方法跑一下,看看转发和数据转换的代码是否能正常工作。
在spring boot里对controller层进行单元测试非常简单,只需要几个注解和一点点辅助代码即可搞定。
依赖的包
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<dependency>
<groupid>org.junit.jupiter</groupid>
<artifactid>junit-jupiter-api</artifactid>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.junit.jupiter</groupid>
<artifactid>junit-jupiter-engine</artifactid>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-test</artifactid>
<scope>test</scope>
</dependency>
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>fastjson</artifactid>
</dependency>
|
使用的spring boot 版本
2.0.4.release
代码
|
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
|
@extendwith(springextension.class)
@springboottest(webenvironment =springboottest.webenvironment.mock,classes = testapplication.class)
@autoconfiguremockmvc
public class usercontrollertest {
@autowired
private mockmvc mockmvc;
@mockbean
private userservice userservice;
@test
@displayname("测试controller方法")
void test() throws exception {
user param = new user();
param.setuserid(1111);
list<address> addresslist = new arraylist<>();
address address = new address();
address.setname("我的地址");
addresslist.add(address);
param.setaddresslist(addresslist);
mvcresult mvcresult = mockmvc.perform(
post("/xxx/test")
.contenttype(mediatype.application_json)
.content(json.tojsonstring(param)))
.andreturn();
system.out.println(mvcresult.getresponse().getcontentasstring());
}
}
|
|
1
2
3
|
@requestmapping(value = "/xxx", method = requestmethod.post)
public object test(@requestbody(required = false)user user) throws exception {
}
|
如果你只是想简单的跑一下controller层,不想真正的去执行service方法的话,需要使用@mockbean将对应的service类mock掉。
|
1
2
|
@mockbean
private userservice userservice;
|
使用spring boot test的时候,它需要一个applicationcontext,我们可以在@springboottest注解中使用classes属性来指定。
|
1
|
@springboottest(webenvironment =springboottest.webenvironment.mock,classes = testapplication.class)
|
testapplication的代码很简单。
|
1
2
3
4
5
6
7
8
9
10
|
@springbootapplication
public class testapplication {
public static void main(string[] args){
springapplicationbuilder builder = new springapplicationbuilder();
builder.environment(new standardenvironment());
builder.sources(testapplication.class);
builder.main(testapplication.class);
builder.run(args);
}
}
|
接下来我们只需要使用mockmvc发送post请求即可。如果controller层的post方法是带@requestbody注解的,可以先将入参对象转换成json字符串。这里使用的是fastjson。
|
1
|
json.tojsonstring(param)
|
经过测试,如上代码能正常工作。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对快网idc的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/linsongbin1/article/details/83574619
相关文章
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-06-04 81
-
2025-05-25 24
-
2025-05-25 104
-
2025-05-27 34
-
2025-05-25 50

