Модульное тестирование класса, который возвращает SQL - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь использовать PHPUnit для модульного тестирования некоторых методов класса, которые возвращают SQL. Эти классы должны работать с любым адаптером Zend_Db, поэтому я бы хотел, чтобы тесты делали то же самое. Мои тесты выглядят примерно так:

public function testEtcGeneratesCorrectSQL()
{
    $model = new ClassBeingTested();

    // do some stuff

    $sql = $model->__toString();

    $this->assertEquals('SELECT foo.* FROM foo WHERE bar = 1', $sql);
}

проблема заключается в разнице между адаптерами. Если я проведу этот тест с использованием Pdo_Mysql, я получу ошибку, подобную этой:

--- Expected
+++ Actual
@@ @@
-SELECT foo.* FROM foo WHERE bar = 1
+SELECT `foo`.* FROM `foo` WHERE `bar` = 1

если я использую адаптер Sqlite:

--- Expected
+++ Actual
@@ @@
-SELECT foo.* FROM foo WHERE bar = 1
+SELECT "foo".* FROM "foo" WHERE "bar" = 1

так что тут делать правильно? Есть ли способ отключить экранирование в Zend_Db, который я могу включить только для этих тестов? Должен ли я жестко кодировать тип адаптера, а затем настроить ожидаемый результат в соответствии? Или зачеркнуть разные символы кавычек перед выполнением утверждения?

1 Ответ

2 голосов
/ 19 августа 2010

Используйте константу вместо жесткого кодирования любого набора кавычек, поэтому для MySQL:

$this->assertEquals('SELECT ' . DB_QUOTE . 'foo' . DB_QUOTE . '.* FROM '
                    . DB_QUOTE . 'foo' . DB_QUOTE . ' WHERE '
                    . DB_QUOTE . 'bar' . DB_QUOTE . ' = 1');

Это выглядит ужасно, но это будет работать, если вы установите DB_QUOTE в зависимости от используемого вами драйвера.

...