开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:单元测试】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15965
单元测试
内容介绍
一、单元测试的对象
二、切片测试
三、集成测试
四、性能测试
五、单元测试讲解
测试部分主要结合代码讲解如何进行单元测试、切片测试、集成测试、性能测试。
一、单元测试的对象
单元测试是测整个代码最小的部分,最基本的模型对象为 Model 对象( Controller , Service , Dao 对象),值对象( VO ,BO , PO 对象),若有方法则需要进行
单元测试,例子中有 VO对象来生成业务对象的方法,接下来讲解单元测试是如何在这些模型对象和 VO 对象中来完成的。
二、切片测试
此时例子的 Service 层是假的 Service 层,并没有访问数据库,所以代码间有意义的是 Controller 层, Controller 层完成了 RESTful API 的实现,以及能对输入的数据进行合法性检查,此重点是测试 Controller 层 RESTful API 以及输入参数的合法性,使用切片测试的方法是分离 Controller 层和 Service 层,也就是只测试 Controller 层的代码,在 SpringBoot 的环境下将 Service 层做成模拟的
SpringBoot 的对象来实现对 Controller 层的测试。
三、集成测试
会将整个系统作为一个整体从 Controller 层 作为入口来测试每个部分的功能,虽然在此例子中集成测试是没有意义的,但是可以出现集成测试的方法,通过这个例子,展现一种把整个系统作为一个整体来做集成测试的方法。
四、性能测试
此部分会选择特定的 API ,比如创建商品的 API 来做性能测试,因为在创建商品 API 时已经做过输入参数合法性检查,所以通过这样的性能测试来观察合法性检查,通过 exception 的方式做合法性检查会出现什么问题。通过代码来讲解测试是
如何完成的。
五、单元测试讲解
如图,所测试的代码都存在于 RestfulDemo 的相关工具的目录中。一般来说在创建代码时,测试代码的目录结构与生产代码的结构保持一致。
例如要测试 GoodsVo ,它是在生产代码中 Controller 包的 VO 包的,测试代码也同样存在于 Controller 包的 VO 包里,而且测试内的命名与生产内的命名有对应关系,需要注意的是所有测试代码的命名要以 Test 结尾,否则无法运行,因此命名为
GoodsVoTest , GoodsVo 中有方法需要测试,叫做 GreatgoodsTest。
在测试此对象之前首先将 VO 对象使用工厂的设计模式创建出,具体的代码需看
Goodsfactory 。
特别说明 Goodsfactory 类是为了测试产生 VO 对象,所以在此类放入 util 中,在生产代码间是没有此类的,因此在打包过程中间是没有这些测试代码的,是没有在
测试代码中间放入的 Goodsfactory ,也不存在 Test 。
Goodsfactory 主要作用是创建 VO ,创建出 Goods 对象需要知道 Goods 对象与预期值是否一致,所以在此处使用了一种方法叫做 assertEqual ,会将 Goods 中间的 name 和预期值做对比,所以在此处比较了 name 、 brief 、 categoryId 、
brandId ,如需要比较 speclist 中的每一个东西是可以实现的,此处已经节省。
这样的单元测试是不依赖框架的,因为测试的对象 Goods VO 并不是一个由
Spring 容器管理的对象,测试是完全与 Spring 容器无关的。
也可以在 Spring 的框架中做单元测试,比如需要单独测试 Dao 对象、 Service 对象也称为单元测试,但是此种方法的单元测试就不纯粹了,是依赖于 Spring 的环境,所看到的 GoodsVO 是最单纯、纯粹的单元测试。