2009-04-23 3 views
1

Ich benutze PHPUnit DataBase, um einige Klasse mit MDB2 zu testen.Wie können mehrere Tests mit MDB2 mit PHPUnit DataBase durchgeführt werden?

Alles ist gut, da begegne ich den zweiten Test, der einen Fehler zurückgibt:

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

Als ich den zweiten Test anstelle des ersten Platz, der neue erste Test ist in Ordnung, aber die zweite man gibt denselben Fehler zurück! Und die nächsten auch!

Vielleicht ist die MDB2-Verbindung nach dem ersten Test geschlossen?

Hier ist mein Konstruktor:

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 ein Singleton zurückgibt. Keine Ausnahme ist innerhalb der Konstruktor angehoben ...

Hier sind die beiden ersten 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

Ich bin verwirrt, wo wird die Ausnahme geworfen? – james

Antwort

2

Sie sollten wirklich Behauptungen hinzufügen, dass Ihr mdb2 Ergebnis kein Fehler ist:

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

That gibt leider keinen Hinweis darauf, was der Fehler ist, und die Verwendung von getMessage() direkt in der Assertion wird schlecht ausfallen, wenn Sie keinen Fehler haben. Deshalb solltest du etwas auf diese Weise schreiben:

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