2012-03-01 2 views
1

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

DBTest::test__getException() 

Argument 1 passed to PHPUnit_Extensions_Database_DataSet_DefaultTableIterator::__construct() must be an array, null given. 

Я не знаю, что я мог бы быть отсутствующим

My Unit Code Test:

<?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 –

+0

@cillosis Этот вопрос является спонтанным относительно сообщения об ошибке, которое я получаю, но решение для ОП появляется t o быть очень специфичным для Zend. Не могли бы вы, возможно, пролить свет на то, как я могу использовать этот вопрос, чтобы помочь мне? –

+0

@LeviHackwith У меня такая же проблема, и я не использую Zend. У меня уже есть имя базы данных в моем XML-документе. Вы придумали другое решение или сделали это для вас? Благодарю. – GreeKatrina

ответ

2

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

0

Это случилось со мной после того, как я добавил местоположение схемы для туздЫшпра как

<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"> 
Смежные вопросы