PHPUnit的数据库测试异常
问题描述:
我想上手使用MySQL数据库建立单元测试,我遇到了此异常:PHPUnit的数据库测试异常
DBTest::test__getException()
Argument 1 passed to PHPUnit_Extensions_Database_DataSet_DefaultTableIterator::__construct() must be an array, null given.
我不知道我可能会错过
我的单元测试代码:
<?php
class DBTest extends Generic_Tests_DatabaseTestCase {
//...
public function getDataSet() {
$dataSet = $this->createMySQLXMLDataSet(dirname(__FILE__)."/../db/t_enroll_fixtures.xml");
return $dataSet;
}
public function setUp() {
$this->X = $this->getMock('\X\Engine\X');
$this->model = new Model($this->X, 't_users');
$this->className = get_class($this->model);
parent::setUp();
}
public function tearDown() {
$this->X = NULL;
$this->model = NULL;
parent::tearDown();
}
public function testMagicFields() {
$this->getConnection()->addTable('t_enroll');
$this->assertEquals(10, $this->getConnection()->getRowCount('t_enroll'));
}
}
?>
的Generic_Test_DatabaseTestCase类:
<?php
require_once "PHPUnit/Extensions/Database/TestCase.php";
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($GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD']);
}
$this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
}
return $this->conn;
}
}
?>
我错过了什么?
答
我有同样的问题。原因是,XML fixture是由MySQLDump生成的,有人删除了<database name="xyz">
节点。 事实证明这$this->tables
PHPUnit中为NULL,而不是阵列
答
这发生在我身上后,我增加了一个架构位置的mysqldump的像
<mysqldump xmlns="mysqldump"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="mysqldump mysqldump.xsd ">
之后我删除了命名空间,它的工作:
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
相关问题:http://stackoverflow.com/questions/4640802/php-testing-models-with-zend-test-phpunit-databasetestcase – 2012-03-01 15:09:42
@cillosis这个问题是关于我收到的错误消息的专利,但OP的解决方案出现t o非常适合Zend。你能否更多地了解我可以如何使用这个问题来帮助我? – 2012-03-01 15:20:38
@LeviHackwith我有同样的问题,并没有使用Zend。我已经在我的xml文档中有数据库名称。你有没有想出一个不同的解决方案,或为你解决它?谢谢。 – GreeKatrina 2015-03-24 16:16:21