1

PHPUnitデータベースを使用して、MDB2を使用していくつかのクラスをテストします。

エラーを返す2番目のテストに遭遇したので、すべてが順調です。

キャッチされた例外:クラスMDB2_Errorのオブジェクトを文字列に変換できませんでした

最初のテストの代わりに2番目のテストを配置すると、新しい最初のテストはOKですが、2番目のテストは同じエラーを返します。そして次のものも!

たぶん、MDB2接続は最初のテストの後に閉じられますか?

これが私のコンストラクターです:

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はシングルトンを返します。コンストラクター内で例外は発生しません...

最初の2つのテストは次のとおりです。

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);
}
4

1 に答える 1

2

mdb2 の結果がエラーではないというアサーションを実際に追加する必要があります。

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

残念ながら、エラーが何であるかのヒントは得られませんgetMessage()。エラーがなければ、アサーションで直接使用するとひどく失敗します。そのため、そのように何かを書く必要があります:

if (MDB2::isError($this->mdb2)) {
    $this->fail('MDB2 error: ' . $this->mdb2->getMessage());
}
于 2011-12-02T09:09:50.397 に答える