Вы проверяете, что для данного входа есть ожидаемый результат.
Если я правильно понимаю, ваш 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 не кажется мне слишком выполнимым, не говоря уже о том, что он завершен.
Связанный: