Вы тестируете что для данного входа ожидается ожидаемый результат.
Если я правильно понимаю, ваш QueryBuilder собирает детали запроса, поэтому убедитесь, что структура данных, содержащая эти части, фактически содержит их, когда вы добавляете их через метод QueryBuilder. Если у него есть метод addWhereClause
или что-то в этом роде, проверьте, действительно ли этот метод, что вы написали в тело метода, например. написать тест как
public function testWhereMethodAddsExpressionToPartsArray()
{
$expression = 'foo = "bar"';
$this->sut->where($expression);
$parts = $this->sut->getParts('where');
$this->assertContains($expression, $parts);
}
Для SqlConstructor сделать то же самый, что тест на входе он получает от вас заполненной структуры данных с QueryBuilder (Вы могли бы хотеть дразнить его за это) дает ожидаемый результат.
Если вы хотите проверить фактическую достоверность SQL, напишите для этого отдельный тестовый файл. Имейте в виду, что цель UnitTest не в том, чтобы обеспечить правильность SQL, но ваш SQLGenerator генерирует SQL так, как вы сказали, чтобы генерировать его.
Проблема при проверке SQL заключается в том, что SQL является сложным. Он имеет формальную грамматику. Сколько из этой грамматики будут покрывать ваши тестовые случаи? Написание парсера для SQL для меня не кажется вполне возможным, не говоря уже о том, что это полно.
Похожие:
Должен ли я на самом деле заботиться о данных, проводимых в 'QueryBuilder'? Разве это не единственная важная вещь для выхода «SqlConstructor»? Я имею в виду, мне действительно все равно, как и как 'QueryBuilder' хранит свои данные, единственное, что меня волнует, это то, что' SqlConstructor' создает допустимую строку запроса. –
@ Dennis, если вы хотите 100% -ное покрытие для тестирования, тогда да, проверьте QueryBuilder. Фактическая * достоверность * SQL - это совсем другое зверь. Как я уже сказал, вы проверяете, чтобы данный ввод выдавал определенный результат (или менял состояние). Тестирование действительного SQL - это другое дело. Это не проверяет функциональность метода, а тестирует синтаксис другого языка. – Gordon
Вы абсолютно правы, чтобы проверить реальную ценность sql, вам нужен полноценный SQL-парсер, который довольно не подходит. Ссылка на тестовый пример ZF также очень полезна. –