Смотрю очередной выпуск подкаста «Организованное программирование» на тему «ORM vs SQL». Внезапно участник рассказал об автоматизированном тестировании SQL-запросов через EXPLAIN.
Ссылка с таймокодом: https://youtu.be/O1Qxpvt7WCw?si=Rbs_vt3CTB7BunRD&t=1147
Удивительно, что я какое-то время назад независимо пришёл к идентичному решению!
Суть подхода:
В проекте много отчётов на чистом SQL (без ORM/query builder). В тестовом окружении все они запускаются с подстановкой EXPLAIN перед SELECT.
Это даёт:
- Мгновенное выполнение в тестах (даже для сложных запросов);
- Проверку синтаксиса, наличия полей и таблиц;
- Нулевую стоимость написания теста (новые отчёты подключаются автоматически).
Надо понимать, что это смоук-тест: он не проверяет данные, но гарантирует запуск отчёта.
Позже метод был адаптирован для других модулей. Например, для CRUD-таблиц с сортировкой по колонкам.
Автотест запускает EXPLAIN SELECT ... ORDER BY [каждая_колонка];
Ловит ошибки в сложных вычисляемых полях с подзапросами (реальные кейсы были!).
Теперь всё покрыто EXPLAIN-тестами без ручного написания. Добавил колонку в CRUD? Движок тестирования сам запустит сортировку.
p.s. до этого использовалась другая менее эффективная идея: всем SELECT запросам добавлялся LIMIT 1 для смоук-тестов.
Post #1433
2.25K