Обычно SQL проверяют так: SELECT * FROM orders WHERE status = 'paid'; И потом сравнивают: «вернулись нужные строки или нет». Но в реальных системах чаще ломается не сам happy path, а скрытые свойства данных. Например, для отчёта по заказам тест должен проверять не только конкретные строки, а правила: -- сумма по пользователям должна совпадать с общей суммой WITH by_user AS ( SELECT user_id, SUM(amount) AS total FROM orders WHERE status = 'paid' GROUP BY user_id ), overall AS ( SELECT SUM(amount) AS total FROM orders WHERE status = 'paid' ) SELECT (SELECT SUM(total) FROM by_user) = (SELECT total FROM overall) AS is_valid; То есть вы тестируете не «мне вернулось 10 строк», а: агрегаты не теряют деньги join не размножает строки фильтр не выкидывает валидные данные NULL не ломает расчёты сумма после группировки совпадает с суммой до группировки каждый order попадает ровно в одну категорию дедупликация не удаляет нужные записи Особенно полезный приём - тест на размножение строк посл
🖥 Cовет по SQL-тестам: тестируйте не только результат запроса, а его инварианты
10 мая10 мая
23
1 мин