系列文章
《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》
前言
本章要介绍的工具时 Spring 的单元测试工具之一,Mockito,Mock对象的行为。
满足单一职责原则的类,都有自己独立的功能与行为,而类与类之间又是相互关联的。就像社会中的人类,人是一个独立的单元,有各自的特征和行为,但人也不可能独立而存在。这种相互关联就是相互间的依赖,要剥离开这种依赖而对单独的一个类进行测试,就必须要有工具来模拟类的依赖,而 Mockito 就是这种工具。
这里从基于 Spring MVC 的三层架构说起,大多数使用场景是将其分为 Controller层,Service层,DAO层,它们的职责独立而又相互依赖。首先看看它们各自的职责:
1,Controller层,这一层通常是定义服务的接口,对业务模块流程的控制,它由Spring MVC框架提供支持;
2,Service层,这一层通常会响应 Controller 的业务请求,并处理业务逻辑。在 Service 层的业务逻辑是比较多样的,包括业务的具体流程的设计,数据层的访问,也可能会访问中间件组件,例如缓存服务器Redis,消息服务RocketMQ,不仅如此,Service层还可能涉及到第三方服务的调用,例如调用支付宝或者微信的支付业务,百度或者高德的地图业务等等之类的接口。所以这层将作为 Unit Test 的重点。
3,DAO层,Data Access Object,顾名思义,这一层就是用于对数据库的访问与存储的。在简单的设计种,甚至可以把它纳入Service层,但是极其不推荐。单独把它抽离出来是很有道理的,首先在多数据库的设计种,它可以对外部调用屏蔽内部的实现,然后是对驱动或者依赖的升级是很友好的。这一层通常在开发时就设计并测试好了的。
确定了Spring MVC架构种各部分的职责,就把 Unit Test 的重点放 在Service 层来讲。
Service层是业务逻辑处理最复杂的一部分,它对外部有很