概述
在日常的开发中,我们一般会定义一个service
层,用于实现业务逻辑,并且针对service
层会有与之对应的齐全的覆盖率高的单元测试。而对于controller
层,一般不怎么做单元测试,因为主要的核心业务逻辑都在service
层里,controller
层只是做转发,调用service
层接口而已。但是还是建议使用单元测试简单的将controller
的方法跑一下,看看转发和数据转换的代码是否能正常工作。
在spring boot
里对controller
层进行单元测试非常简单,只需要几个注解和一点点辅助代码即可搞定。
依赖的包
<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
代码
@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()); } }
@requestmapping(value = "/xxx", method = requestmethod.post) public object test(@requestbody(required = false)user user) throws exception { }
如果你只是想简单的跑一下controller
层,不想真正的去执行service
方法的话,需要使用@mockbean
将对应的service
类mock
掉。
@mockbean private userservice userservice;
使用spring boot test
的时候,它需要一个applicationcontext
,我们可以在@springboottest
注解中使用classes
属性来指定。
@springboottest(webenvironment =springboottest.webenvironment.mock,classes = testapplication.class)
testapplication
的代码很简单。
@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
。
json.tojsonstring(param)
经过测试,如上代码能正常工作。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对移动技术网的支持。如果你想了解更多相关内容请查看下面相关链接
如对本文有疑问, 点击进行留言回复!!
荐 嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)
SpringBoot项目部署到服务器之 Liunx环境安装jdk详细步骤
网友评论