Как сделать несколько тестов, используя MDB2 с PHPUnit DataBase? - PullRequest
1 голос
/ 23 апреля 2009

Я использую базу данных PHPUnit для тестирования некоторого класса с использованием MDB2.

Все хорошо, так как я сталкиваюсь со вторым тестом, который возвращает ошибку:

Поймано исключение: объект класса Ошибка MDB2_Error не может быть преобразована в строка

Когда я помещаю второй тест вместо первого, новый первый тест в порядке, но второй возвращает ту же ошибку! И следующие тоже!

Может быть, соединение 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 возвращает синглтон. Внутри конструктора не возникает никаких исключений ...

Вот два первых теста:

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

1 Ответ

2 голосов
/ 02 декабря 2011

Вы действительно должны добавить утверждения, что ваш результат mdb2 не содержит ошибок:

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

Это, к сожалению, не дает вам никаких намеков на то, что это за ошибка, и использование getMessage() непосредственно в утверждении приведет к неудаче, если у вас нет ошибки. Вот почему вы должны написать что-то подобное:

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