2012-03-01 3 views
1

Je suis en train de commencer avec la mise en place des tests unitaires en utilisant une base de données MySQL et je suis en cours d'exécution dans cette exception:PHPUnit Test Database Exception

DBTest::test__getException() 

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

Je ne sais pas ce que je pourrais être absent

Mon unité test code:

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

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

} 
?> 

Qu'est-ce qui me manque?

+0

Question connexe: http://stackoverflow.com/questions/4640802/php-testing-models-with-zend-test-phpunit-databasetestcase –

+0

@cillosis Cette question est sur le point concernant le message d'erreur que je reçois, mais le solution pour l'OP apparaît t o être très spécifique à Zend. Pourriez-vous nous éclairer un peu sur la façon dont je pourrais utiliser cette question pour m'aider? –

+0

@LeviHackwith J'ai le même problème et je n'utilise pas Zend. J'ai déjà le nom de la base de données dans mon document XML. Avez-vous trouvé une solution différente, ou est-ce que cela vous a arrangé? Merci. – GreeKatrina

Répondre

2

J'ai eu le même problème. La raison en était que le fichier XML a été généré par MySQLDump et que quelqu'un a supprimé le noeud <database name="xyz">. cela se $this->tables dans PHPUnit dans NULL au lieu tableau

0

Ce qui est arrivé à moi après j'ai ajouté un emplacement de schéma pour la mysqldump comme

<mysqldump xmlns="mysqldump" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="mysqldump mysqldump.xsd "> 

Après avoir enlevé l'espace de noms, il a travaillé:

<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">