Исключение тестирования базы данных PHPUnit - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь начать настройку модульных тестов с использованием базы данных MySQL, и я сталкиваюсь с этим исключением:

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 Class:

<?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;
    }

}
?>

Что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2013

У меня была такая же проблема.Причина была в том, что фикстура XML была сгенерирована MySQLDump и кто-то удалил узел <database name="xyz">Это превратило $this->tables в PHPUnit в NULL вместо Array

0 голосов
/ 10 июня 2015

Это случилось со мной после того, как я добавил расположение схемы для 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">
...