Как бы вы протестировали класс, который может добавить к запросу десятки различных фильтров? - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь перенести страницу из старой системы в новую, где мы пытаемся выполнить все юнит-тестирование.

Страница содержит около 40 расширенных поисковых фильтров для поиска в нашей таблице продуктов и связанных с ней страницах.таблица.

Некоторые из них представляют собой простой поиск по полю, но другие создают новые объединения или подзапросы.

Я в недоумении, как выполнить модульное тестирование хранилища, метод получает массивиз предоставленных пользователем фильтров и должен возвращать соответствующие продукты, внутри он использует Doctrine ORM и DQL для генерации всех запросов.

I, хотя из следующего:

  • Фильтры модульного тестирования по одномуone
    • Проблема: проходит много тестов и не охватывает смешивание фильтров.
  • Сравнение выведенного кода MySQL с ожидаемым выводом
    • Проблема: нетгибкий, и не проверяет фактический результат.

Так как бы вы пошли на проверку этого?

1 Ответ

0 голосов
/ 31 мая 2018

Если вы не можете гарантировать порядок кода, то проверка кода MySQL, как и ожидалось, потребует много времени для проверки.Вместо этого вы можете:

  1. Добавить каждый фильтр отдельно.Проверьте, является ли запрос тем, что ожидается, и что он будет выполнен.В идеале проверьте записи на ожидаемую запись
  2. Добавьте несколько элементов вместе.Убедитесь, что запрос, по крайней мере, содержит код, который вы ожидаете добавить (чтобы вам не нужно было гарантировать порядок его добавления) и чтобы запрос выполнялся.

Для части 2, еслиВы можете автоматизировать это, чтобы запустить проверки, тогда даже лучше.Проверка всех возможных дополнений будет практически невозможна, так как существует 1099 511 627 775 комбинаций от выбора всего одного фильтра до выбора всех 40. Каждое из них должно быть проверено на предмет генерирования SQL, содержащего то, что вы ожидаете, но также и работает правильно.

Иногда в модульном тестировании все невозможно.Иногда вам нужно просто проверить «достаточно», как бы вы это ни измеряли.

...