Юнит-тесты для новичков: зачем нужны и как писать

Заметили, что даже в вакансиях для джунов всё чаще требуют разбираться в тестировании? Рассказываем, что такое юнит-тесты, почему они важны и как писать их быстро и без ошибок. Если инженеры не проверят мост на прочность, он может рухнуть.
Так же и с кодом — без тестов он, скорее всего, будет сбоить. Поэтому тесты экономят не только время разработчика, но и ресурсы компании. А ещё повышают доверие пользователей к продукту. В программировании под словом «юнит» чаще понимают функцию, метод или класс в исходном коде. А юнит-тесты — это автоматизированные проверки, с помощью которых тестируют отдельные «блоки» или «юниты» кода. Существует целая пирамида тестирования, которая помогает разработчикам определить, какие тесты писать и в каком количестве. Системные тесты оценивают работу системы в целом, интеграционные проверяют взаимодействие некоторых компонентов между собой, а юнит-тесты фокусируются на каждой отдельной части. Они особенно полезны, когда хотите убедиться, что ваша последняя правка не сломала существующие функции. В идеале большую часть тестов должны составлять юнит-тесты: они быстрые, дешёвые и эффективные. А интеграционные и системные обычно пишут в меньшем количестве — из-за их сложности, больших финансовых затрат и времени на выполнение. Существует несколько видов юнит-тестов, которые помогают проверить различные аспекты кода: На практике можно использовать как один вид юнит-тестов, так и сразу все — это зависит от сложности проекта и требований к тестированию. Подготовка юнит-теста начинается с понимания, что именно нужно проверить, и заканчивается написанием нужного кода. Допустим, есть часть приложения для интернет-банкинга, которое позволяет пользователям переводить деньги между счетами, просматривать историю транзакций и получать уведомления. Вот код класса InternetBanking на Python. В нём предусмотрено исключение для случаев, когда при переводе вводят отрицательную сумму или когда человек пытается снять больше денег, чем есть на счету. А так может выглядеть юнит-тест для InternetBanking, который включает в себя позитивное, негативное и тестирование состояния, чтобы покрыть разные аспекты функциональности: Этот пример показывает, как можно тестировать разные аспекты поведения класса и проверять как ожидаемое поведение, так и возможные ошибки или исключительные ситуации. Обратите внимание: существует и другой подход к разработке. В таком случае сначала пишут тесты, а уже под них адаптируют логику и код. Часто новичкам-разработчикам кажется, что покрыть весь код тестами — сложно и долго. Собрали советы, которые помогут быстро и качественно справиться с этой задачей. 1. Сначала — понять задачуРазрабатываете новый функционал или сервис? Разберитесь, что именно он должен делать. Например, зарплатный модуль может не только считать зарплату, но и вычитать налоги, создавать отчёты, добавлять премии. 2. Принцип «новый код — новый тест»Если добавляете новую функцию для автоматического расчёта налогов из зарплаты, напишите тест прежде, чем интегрировать функцию в основной код. Это сократит количество ошибок и ускорит процесс разработки. 3. Строгий контроль качестваВ некоторых командах есть правило: новый код без юнит-теста не проходит код-ревью. Это гарантирует, что каждый фрагмент кода проверен и работает корректно. 4. Готовые инструментыНе изобретайте велосипед, используйте готовые фреймворки. Например, для Python это может быть pytest или unittest. 5. Простота — залог успехаРазбивайте сложную функцию на несколько небольших — это упростит процесс тестирования и облегчит чтение кода. 6. Негативные тесты тоже важныПомимо проверки корректности работы кода, проверьте его устойчивость…
Источник: tproger.ru — tproger.ru/articles/yunit-testy-dlya-novichkov—zachem-nuzhny-i-kak-pisat