您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
phpunit中getDataSet的执行时机
发布时间:2021-09-28 19:30:46编辑:雪饮阅读()
就前面实现了好几个数据集,但是有没有仔细观察其dataSet方法的执行时机?有时候会发现自己测试类中有getConnection与getDataSet的实现,那么即便测试类运行没有问题,但是数据库中仍旧没有数据。
这是因为没有测试方法,像是下面这个:
MyAppTestsDatabaseTestCase.php:
<?php
use PHPUnit\Framework\TestCase;
use PHPUnit\DbUnit\TestCaseTrait;
use PHPUnit\DbUnit\DataSet\CsvDataSet;
abstract class MyAppTestsDatabaseTestCase extends TestCase
{
use TestCaseTrait;
static private $pdo = null;
private $conn = null;
final public function 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;
}
public function getDataSet()
{
$dataSet = new CsvDataSet();
$dataSet->addTable('guestbook', dirname(__FILE__)."/guestbook.csv");
return $dataSet;
}
}
class MyAppTestsDatabaseTestCaseImplement extends MyAppTestsDatabaseTestCase{
//public function testConnect(){}
}
use PHPUnit\Framework\TestCase;
use PHPUnit\DbUnit\TestCaseTrait;
use PHPUnit\DbUnit\DataSet\CsvDataSet;
abstract class MyAppTestsDatabaseTestCase extends TestCase
{
use TestCaseTrait;
static private $pdo = null;
private $conn = null;
final public function 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;
}
public function getDataSet()
{
$dataSet = new CsvDataSet();
$dataSet->addTable('guestbook', dirname(__FILE__)."/guestbook.csv");
return $dataSet;
}
}
class MyAppTestsDatabaseTestCaseImplement extends MyAppTestsDatabaseTestCase{
//public function testConnect(){}
}
这里虽然是继承的,父类没有任何测试方法,子类唯一的测试方法被注释了,则这种情况下执行结果自然无法触发getDataSet,就是说在有测试方法即便只有一个,因为这个getDataSet运行时机就是在测试方法之前的。这里无关是否继承,即便是父类自身而无子类时候,也是同样的道理。像是这里,只要将子类这个测试方法去除注释,哪怕它是一个空方法,也能出触发getDataSet方法。
关键字词:phpunit,getDataSet