Los*_*can 16 php phpunit dbunit unit-testing
我目前正在为我的项目使用PHPUnit和DBUnit.我在DBUnit中遇到问题,因为DBUnit PHPUnit_Extensions_Database_TestCase
Src类似乎没有截断测试数据库上的现有数据.所以这使我的插入测试在仅工作一次后失败.
我使用的是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');
}
...
}
Run Code Online (Sandbox Code Playgroud)
那么我该如何解决这个问题呢?我在这里做错了什么?
hak*_*kre 38
如果重写该setUp
方法,PHPUnit将不会自动调用您的getDataSet
方法.您需要注意调用该parent::setUp
方法,否则PHPUnit不知道该怎么做;).
小智 5
我自己遇到了这个问题,这是我在深入研究PHPUnit源代码后解决它的方法.看起来PHPUnit_Extensions_Database_TestCase类的默认行为是返回PHPUnit_Extensions_Database_Operation_Factory :: NONE().根据您的需要,以及PHPUnit文档如何暗示它应该如何工作,您将希望重写该方法以返回PHPUnit_Extensions_Database_Operation_Factory :: TRUNCATE().
幸运的是,这是相当直截了当的.您只需将以下内容添加到TestCase类中即可.
protected function getTearDownOperation()
{
return \PHPUnit_Extensions_Database_Operation_Factory::TRUNCATE();
}
Run Code Online (Sandbox Code Playgroud)
在此之前,我在Teardown()方法中手动截断表,但我认为你会同意这个解决方案要好得多.
归档时间: |
|
查看次数: |
5942 次 |
最近记录: |