PHPunit
https://phpunit.de/index.html
目标
- 简单! 高效敏捷 代码易写,逻辑简单
- 稳定! 持续集成 提交代码自动生成测试报告
- 清晰! 文档体现 容易理解
数据库测试的难点和解决方案
难点
为以数据库为中心的单元测试将远难于仅基于逻辑程序的单元测试。
对数据库进行测试时,需要处理以下可变因素:
- 清理脏数据
- 准备新数据
- 验证数据状态
而我们的测试代码应当尽可能简短精确,这有若干原因:
- 我们不希望为生产代码的小变更而对测试代码进行数量可观的修改。
- 我们希望在哪怕好几个月以后也能轻松地阅读并理解测试代码
方案
用 PHPunit 提供的 DbUnit 套件来完成上述的事情
- 自动用清理数据库环境 (如果能逻辑清理脏数据是最好的,但目前还不能实现)
- 自动插入测试所需要的行
- 更简单的验证数据库状态
目前发现的缺陷
不支持多数据库连接,还好我们可以封装一个简单的类来让支持这个需要。
目录结构
应用目录结构
.
├── applications
│ ├── configs
│ ├── init
│ ├── library
│ ├── public
│ ├── runtime
│ ├── service
│ ├── template
│ └── tests //单元测试目录
├── sdk
└── Vipcore
单元测试目录结构
.
├── ApiTest //单元测试代码
│ ├── Brand
│ └── Merchandise
├── bin
│ └── phpunit //phpunit包
├── DataBase
│ └── vipshop //数据库表初始化
├── Bootstrap.php //初始化脚本
├── phpunit.xml //phpunit 配置文件
├── README.md //README
└── run-tests.php //执行文件
执行测试
php run-test.php //测试全部用例
php run-test.php ApiTest/Brand //测试部分用例
php run-test.php ApiTest/Merchandise/MerchandiseTest.php //测试单个文件
php run-tests.php ApiTest/Merchandise/MerchandiseTest.php --filter testModifyByMidHasLog //测试单个单元测试
编写测试脚本
数据增删改接口
- 准备数据环境
- 执行测试接口
- 检验数据状态
- 清理数据环境
数据查询接口
- 准备数据环境
- 执行测试接口
- 检验返回状态
- 清理数据环境
Edit By MaHua