2012-03-01 149 views
1

我想上手使用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; 
    } 

} 
?> 

我错过了什么?

+0

相关问题:http://stackoverflow.com/questions/4640802/php-testing-models-with-zend-test-phpunit-databasetestcase – 2012-03-01 15:09:42

+0

@cillosis这个问题是关于我收到的错误消息的专利,但OP的解决方案出现t o非常适合Zend。你能否更多地了解我可以如何使用这个问题来帮助我? – 2012-03-01 15:20:38

+0

@LeviHackwith我有同样的问题,并没有使用Zend。我已经在我的xml文档中有数据库名称。你有没有想出一个不同的解决方案,或为你解决它?谢谢。 – GreeKatrina 2015-03-24 16:16:21

回答

2

我有同样的问题。原因是,XML fixture是由MySQLDump生成的,有人删除了<database name="xyz">节点。 事实证明这$this->tables PHPUnit中为NULL,而不是阵列

0

这发生在我身上后,我增加了一个架构位置的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">