对数据库进行断言
最后更新于:2022-04-02 00:33:38
由于TP测试框架更偏向于黑盒测试(实际上我们使用的是灰盒测试),因此在对数据库进行测试的时候,我们没有办法(或者是不方便)使用mock。所以我们使用TP测试框架的时候对数据操作进行测试的时候,我们需要为数据库的基境进行搭建。
> 1. 黑盒测试:测试人员不需要了解代码如何工作,只需要根据指定输入,断言输出。
> 2. 白盒测试:测试人员需要了解代码,用来帮助测试的进行。
> 3. 灰盒测试:黑盒和白盒的中间,使用黑盒方法的同时使用白盒测试。
TP的官方测试框架主要使用灰盒的测试方法,如果需要使用mock的话,可以使用快速入门中提到的测试库。
## 安装DBUnit。
使用thinkUnit的时候安装的PHPUNIT依赖中是没有DBUNIT的。因此如果我们要对数据库进行测试的话,那么就需要安装DBUnit了。
可以在composer中的require-dev中添加以下的依赖:
`"phpunit/dbunit": ">=1.2"`
然后更新composer即可。
`composer update`
## 编写测试用例
安装完DBUnit之后,我们就需要重新编写测试用例了。不过,TP本身的测试库并没有提供数据库测试的测试用例基类,因此需要我们自己编写。
```
......其他配置
......
```
而后在getConnection方法为:
```
if ($this->conn === null) {
if (self::$pdo == null) {
self::$pdo = new \PDO( $GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD'] );
}
$this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
}
return $this->conn;
```
> 再走一步:但是这样的话,我们每个方法也需要写这样重复的内容。因此,我们还可以将其抽象为父类,然后再需要使用数据库的测试类中继承该类。
';