Spring Boot单元测试(Mock)

Spring Boot单元测试(Mock)

Java个人学习心得 2017-08-12 16:07

MyBatis 1

Mock

单元测试的重要就无多说了,我当下边的工一般都是Spring
Boot+Mybatis(详情可参考《Spring
boot+MyBatis+PageHelper+JSON》),现在形容一下Spring
Boot下怎么测试Controller、Service。

Controller测试

正文就简单一点,写一个Hello接口。

MyBatis 2

Controller

HTTP请求测试:

既然如此是测试Controller接口,肯定就是殡葬HTTP请求了,之前的章我呢出提到,可以动用Postman、Swagger进行测试,本文我们运用编码的法子测试,新建HttpRequestTest类:

MyBatis 3

HTTP测试类

专注三只红框,这是语Spring
Boot启动的当儿使用一个随机的端口,有助于在测试环境中避免冲突(官网解释)。

绿框的restTemplate,看了之前自己的《Spring
Cloud网关与负载均衡Zuul与Ribbon》就了解,与RestTemplate差不多,这虽是只HTTP客户端。

运转测试通过。注意看日志,会找到一行日志:

Tomcat started on port(s):XXXXX

当时证明整Tomcat已经启动成功了。

MockMVC测试:

留神点的测试,通过日记我们了解,其实就算是启动了Tomcat,然后通过TestRestTemplate构建了HTTP请求。但是在咱们实在开发中,有一个实际的题材,我们一个工会产生不少之Controller、Service、Mapper,但是我们此次测试可能就测一个接口。为了一个接口,要开动全套Tomcat,太浪费了。所以我们可以使用MockMVC,在不启动之服务之景况下,测试接口:

MyBatis 4

Mock测试

实际开发中,肯定会时有发生那么些Controller,红框内我们指定本次测试只有实例化HellController这一个。

另外当开发之上,Eclipse没法通过快捷键进行import
static,所以我们要手工导入以下:

MyBatis 5

导入

运行论测试,注意看日志,就不见面并发Tomcat started on
port(s):XXXXX的笔录了。

Service测试

每当实际上支付中,Service的逻辑处理比较多,应该是最先给测试的,本示例增加一个Service和Mapper,如下:

MyBatis 6

Mapper

在自家事先特别完整的工中,这个注解应该是@Mapper,本例我从未引入数据库,只是学一下,所以用了@Repository。MyBatis 7

Service

在@Service下应该还有工作注解@Transactional,本例只是法,所以也从没加。

测试类如下:

MyBatis 8

测试类

注意红框,在实际支出中,我们团结一心写的Controller、Service很可能夺调整用别的同事还是别的路组写的Service、Mapper,对方可能只有写了一个接口,没有实现(比如本例中本身形容的Mapper),这样是迫于进行测试的。

Mock的图就是是创立一个虚构的靶子替代那些是构造或对获取的对象。

本例中本人都尚未引入数据库的连锁依赖,本来应该是连数据库的Mapper,现在虽是一个只有的接口,如果不对准Mapper进行处理,这个测试就没法进行下去。

于是当第一只吉祥框内Mock了一个HelloMapper,第二独红框对之Mock对象的计开展了处理,等于Mapper接收参数“leo”,返回结果“Hello
leo”,给Service使用。

运转测试通过。

Controller测试(含Service)

于“MockMVC测试”一节中,我们才测了Controller里的一个方,没有引入Service,这在骨子里工作着是勿可能的,我们或引入自己写的Service,要么引入其他同事写的Service(接口形式),如果此时引入的Service同样没实现,这测试呢没法开下来。结合“Service测试”的始末,我们得这样做:

MyBatis 9

Controller

Controller新增一个办法,调用了Service。

MyBatis 10

测试类

测试类增加而齐代码,Mock一个假的Service,用when来处理Service,用MockMVC模拟HTTP请求,测试通过。

网站地图xml地图