Тестирование построителя запросов - PullRequest
5 голосов
/ 08 сентября 2010

Я создаю построитель запросов, который хочу выполнить модульное тестирование.
Я не знаю, как это сделать.

Он (в настоящее время) состоит из двух частей: сам QueryBuilder, который обеспечивает свободный интерфейс для построения запросов. И SqlConstructor, который заботится о построении фактического SQL.

Так в принципе, как мне проверить «правильность»? Должен ли я просто проверить наличие ключевых слов? (Например, select является первым ключевым словом в запросе типа выбора?) Я думаю, что для правильного тестирования есть много важных вещей, таких как порядок появления ключевых слов и т. Д. И т. Д.

1 Ответ

2 голосов
/ 08 сентября 2010

Вы проверяете, что для данного входа есть ожидаемый результат.

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

Связанный:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...