2009-04-23 10 views
1

J'utilise PHPUnit DataBase pour tester certaines classes en utilisant MDB2.Comment faire plusieurs tests en utilisant MDB2 avec PHPUnit DataBase?

Tout est bien, depuis que je rencontre le second test, qui renvoie une erreur:

Caught exception: Object of class MDB2_Error could not be converted to string

Quand je place le deuxième test à la place du premier, le nouveau premier test est OK, mais la deuxième on retourne la même erreur! Et les prochains aussi!

Peut-être que la connexion MDB2 est fermée après le premier test?

Voici mon constructeur:

public function __construct() 
{ 
    $this->pdo = new PDO('connectionstring', 'user', 'passwd'); 
    try { 
     $this->mdb2 = new MyDBA($this->dsn); 
    } 
    catch (Exception $e) { 
     error_log(' __construct Caught exception: '.$e->getMessage()); 
    } 
} 

MyDBA retourne un singleton. Aucune exception est levée dans le constructeur ...

Voici les deux premiers tests:

public function testTranslationAdd() 
{ 
    try { 
     $id = $this->mdb2->addTranslation("This is the second english translation.","en"); 
    } 
    catch (Exception $e) { 
     error_log(' testTranslationAdd Caught exception: '.$e->getMessage()); 
    } 

    $xml_dataset = $this->createFlatXMLDataSet(dirname(__FILE__).'/state/twotranslations.xml'); 
    $this->assertDataSetsEqual($xml_dataset, 
           $this->getConnection()->createDataSet(array("translation"))); 
} 

public function testTranslationGet() 
{ 
    try { 
     $text = $this->mdb2->getTranslation(1,"en"); 
    } 
    catch (Exception $e) { 
     error_log(' testTranslationGet Caught exception: '.$e->getMessage()); 
    } 

    $this->assertEquals("This is the first english translation.",$text); 
} 
+0

Je suis confus, où est l'exception levée? – james

Répondre

2

Vous devriez vraiment ajouter que les affirmations de votre résultat mdb2 est pas d'erreur:

$this->assertFalse(MDB2::isError($this->mdb2), 'MDB2 error'); 

Ce malheureusement, cela ne vous donne aucune indication sur l'erreur et utiliser getMessage() directement dans l'assertion échouera gravement si vous n'avez pas d'erreur. C'est pourquoi vous devriez écrire quelque chose le long de cette façon:

if (MDB2::isError($this->mdb2)) { 
    $this->fail('MDB2 error: ' . $this->mdb2->getMessage()); 
} 
Questions connexes