Comments 12
Если тест синих (чистых) функций, то тестовое покрытие вполне качественно сделает LLM. Неплохая штука для проверки что контракты не сломались. Особенно в rust, где всё уже в стандарте языка.
Тесты красных функций я тупо не делаю.
Особенно, если они зависят от БД или сети. Некоторые делают in memory implementation и тестят самый минимум, happy path
95% покрытия юнит-тестами без требования набивать
Как так вышло:
Во-первых, речь про одну подсистему - бэкенд. По всей системе показатель получится сильно ниже, но это другие подкоманды, другие репозитории и т.д. Так что позволю себе считать отдельно. Фронт, например, покрыт автотестами высокого уровня, но там покрытие не считается.
Во-вторых, это маленький проект в районе 40к LOC собственно кода и 40к LOC тестов. Я сам удивлён таким совпадением - только что посчитал. Около 2000 отдельных тестов. Исполняется за 3 минуты раннером гитхаба и за полторы минуты на моём обычном ноуте.
В-третьих - и это чуть ли не решающий момент - код нельзя запустить локально кроме как через юнит-тесты. Когда ты не можешь что-то просто запустить и "протыкать" сценарии руками, ты естественным образом придёшь к высокому покрытию. Почему нельзя запустить локально - это отдельный разговор и отдельная история. Технически-то можно этого добиться, но мы очень быстро распробовали кодинг полностью через тесты. Да, минусы в этом есть, но повторюсь, отдельный разговор.
В-четвёртых, на старте проекта я впервые не спрашивал разрешение писать тесты, не оценивал их отдельным пунктом, а просто вместе с подопечными стал их писать как будто это само собой разумеется, и это было до того, как мы перестали даже пытаться что-то запускать локально.
В-пятых, интеграция тестов в общий воркфлоу чуть ли не с первого дня. Отчёты покрытия появляются в ПРах. Также настроены чеки: без зелёных тестов нельзя смёрджить ПР и/или что-то запушить в ветки откуда идёт деплой.
Егор, привет! Как думаете, к другому проекту (более крупному или просто другому) этот подход можно применить? Читаю вашу историю, и кажется, что у вас все очень здорово естественным образом сложилось в пользу тестов.
Также настроены чеки: без зелёных тестов нельзя смёрджить ПР и/или что-то запушить в ветки откуда идёт деплой.
Кстати, как относилась команда к таким требованиям?
Если пофантазировать об идеальном процессе:) Можно ли интегрировать тесты в общий воркфлоу с первого дня, не вызывая сопротивления команды?
Ложная дихотомия, это и MustHave и Bullshit. Так как даже 100% покрытие это не гарантия от багов, см. Pesticide Paradox
Задача автоматического тестирования никогда и не была в гарантии отсутствия багов. А в достижимости этой цели в принципе. В отличии от ситуации когда тестов вообще нет.
Гарантию от багов, вряд ли, что-то может дать. Тестовое покрытие - это больше про подстраховку и отчетность перед руководством, как думаете? Ну и вероятно, все-таки бывают ситуации, когда нужно хоть что-то делать.
Опрос: тестовое покрытие — must-have или bullshit