【发布时间】:2012-03-18 10:10:33
【问题描述】:
我目前正在为我的项目使用 PHPUnit 和 DBUnit。我在 DBUnit 中有一个问题,因为 DBUnit PHPUnit_Extensions_Database_TestCaseSrc 类似乎没有截断测试数据库上的现有数据。所以这使得我的插入测试只工作了一次就失败了。
我正在使用 mysql,这是我的代码:
abstract class Generic_Tests_DatabaseTestCase extends PHPUnit_Extensions_Database_TestCase
{
// only instantiate pdo once for test clean-up/fixture load
static private $pdo = null;
// only instantiate PHPUnit_Extensions_Database_DB_IDatabaseConnection once per test
private $conn = null;
final public function getConnection()
{
if ($this->conn === null) {
if (self::$pdo == null) {
self::$pdo = new PDO( "mysql:dbname=db;host=localhost", "root", "pass" );
}
$this->conn = $this->createDefaultDBConnection(self::$pdo, "db");
}
return $this->conn;
}
}
class DbopTest extends Generic_Tests_DatabaseTestCase
{
private $db;
protected function setup(){
$this->db = null;
}
public function getDataSet(){
return $this->createMySQLXMLDataSet(dirname(__FILE__) . '/../rows.xml');
}
...
}
那么我该如何解决这个问题呢?我在这里做错了什么?
【问题讨论】:
-
希望的截断发生在哪里?您使用的是哪个版本的 PHPUnit 和哪个版本的 DBUnit?
-
这就是问题所在,我认为在我的 getDataSet 方法中,截断会自动运行。但我看不到这种情况发生。我正在使用 PHP 单元 3.6.10。
-
这只是一个猜测,但您正在覆盖
setUp()方法。请检查getDataSet()是否仍在被调用。 -
是的,当我调用 parent::setup 时,问题已解决,猜得好; )
-
+1 有用的问题,因为使用 getDataSet 和使用 Generic DataTest 类!
标签: php unit-testing phpunit dbunit