#лабораторный_журнал
Притча про пользу юнит-тестов.
У джуна была задачка. В БД лежат сущности А и Б, у обеих есть координата Х. Надо сделать API ручку, которая принимает на вход сущность А и возвращает ближайшую к ней сущность Б.
Джун сделал. Для проверки написал огромный скрипт, который скачивает все А из прода, подает в эндпоинт, сохраняет полученные Б, потом делает сопоставление отдельным SQL запросом в БД, сравнивает результаты. Приходит ко мне, говорит: двадцать пять тысяч сопоставилось верно, а четыре тысячи неверно и я не понимаю почему. Как искал проблему: смотрел на координаты, которые неправильно сопоставились, искал закономерности. Не нашел.
Я говорю: Господь дал нам грешным юнит-тесты, используй их! Делаешь тест, где для каждой Б создаешь в той же точке одну А. Запускаешь сопоставлялку. Каждой А должна сопоставится одна конкретная Б. Проверяешь, что все, что должно было сопоставиться, сопоставилось. Джун спрашивает: какой смысл проверять, что то, что я уже сопоставил, сопоставилось верно?
А вот какой. В твоем скрипте может быть проблема в трех местах: при загрузке данных из прода, в твоем коде сопоставления, в коде сопоставления через SQL запрос. В юнит-тесте ты фиксируешь входы и ожидаемые выходы: проблема может быть только в коде сопоставления. Никаких движущихся частей. И не надо перебирать тысячи примеров, чтобы поймать ошибку.
Джун мне не поверил, посмотрел на меня как на дурного, но согласился попробовать. Позже пишет: написал тест и сразу нашел проблему. Оказалось, что float координата на входе тихо конвертилась в int, поэтому иногда сущности сопоставлялись неверно.
В мире стало на одного просветленного больше.
Post #1418
1.39K
- 👍 55
- 😁 6
- 🔥 4
- 👎 1