HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Новая фича для приложения готова. Переходим к тестированию кода на предмет возможных ошибок из-за нового функционала. Тестировать весь код необязательно, можно работать только с частью благодаря модульному тестированию или unit тесту.</p>
1 <p>Новая фича для приложения готова. Переходим к тестированию кода на предмет возможных ошибок из-за нового функционала. Тестировать весь код необязательно, можно работать только с частью благодаря модульному тестированию или unit тесту.</p>
2 <h2>Содержание</h2>
2 <h2>Содержание</h2>
3 <ul><li><a>Unit тесты: возможности и особенности</a></li>
3 <ul><li><a>Unit тесты: возможности и особенности</a></li>
4 <li><a>Как провести модульное тестирование?</a></li>
4 <li><a>Как провести модульное тестирование?</a></li>
5 </ul><p>Каждая функция и любой компонент программы - отдельный модуль, юнит. Это может быть кнопка бронирования билетов, формула расчета ипотеки или скрипт для генерации имени PDF-файла. Проверить правильность написания такого модуля можно unit тестом. Он покажет корректность работы блока без влияния на него других модулей.</p>
5 </ul><p>Каждая функция и любой компонент программы - отдельный модуль, юнит. Это может быть кнопка бронирования билетов, формула расчета ипотеки или скрипт для генерации имени PDF-файла. Проверить правильность написания такого модуля можно unit тестом. Он покажет корректность работы блока без влияния на него других модулей.</p>
6 <h3>Почему выбирают unit тесты?</h3>
6 <h3>Почему выбирают unit тесты?</h3>
7 <ul><li>Не нужно привлекать тестировщиков. Поскольку тестируется изолированная часть программы без взаимосвязей и интеграции, программист сам запустит проверку после написания кода.</li>
7 <ul><li>Не нужно привлекать тестировщиков. Поскольку тестируется изолированная часть программы без взаимосвязей и интеграции, программист сам запустит проверку после написания кода.</li>
8 <li>Простота выполнения. Unit тесты не предполагают сложных вычислений и не требуют комплексной инфраструктуры.</li>
8 <li>Простота выполнения. Unit тесты не предполагают сложных вычислений и не требуют комплексной инфраструктуры.</li>
9 <li>Высокая скорость реализации и, соответственно, низкая стоимость. На проверку небольшой функции уходит всего несколько секунд. Изолированность юнитов позволяет проверять работоспособность нескольких модулей одновременно.</li>
9 <li>Высокая скорость реализации и, соответственно, низкая стоимость. На проверку небольшой функции уходит всего несколько секунд. Изолированность юнитов позволяет проверять работоспособность нескольких модулей одновременно.</li>
10 <li>Простота автоматизации. Unit тест исследует ответ кода на ввод данных и определенные действия. Он не требует проиграть сценарий взаимодействия конечного пользователя с новой функцией, поэтому автоматизация процесса не отнимает много сил и времени.</li>
10 <li>Простота автоматизации. Unit тест исследует ответ кода на ввод данных и определенные действия. Он не требует проиграть сценарий взаимодействия конечного пользователя с новой функцией, поэтому автоматизация процесса не отнимает много сил и времени.</li>
11 </ul><h3>Когда нужны unit тесты?</h3>
11 </ul><h3>Когда нужны unit тесты?</h3>
12 <p>Модульным тестированием лучше не пренебрегать. На более поздних этапах при проведении сложных интеграционных и сквозных тестов можно выявить точечные баги, обнаружить которые может unit тестирование. Но времени на выявление проблемного места в коде будет потрачено намного больше.</p>
12 <p>Модульным тестированием лучше не пренебрегать. На более поздних этапах при проведении сложных интеграционных и сквозных тестов можно выявить точечные баги, обнаружить которые может unit тестирование. Но времени на выявление проблемного места в коде будет потрачено намного больше.</p>
13 <p>Unit тесты обязательно нужны, если вы разрабатываете приложения со сложной бизнес-логикой или применяете ее в модулях. Иногда же такое тестирование необязательно. Например:</p>
13 <p>Unit тесты обязательно нужны, если вы разрабатываете приложения со сложной бизнес-логикой или применяете ее в модулях. Иногда же такое тестирование необязательно. Например:</p>
14 <ul><li>Вы разрабатываете сайт-визитку с одной формой отправки заявки. Даже если сайт состоит из нескольких статических страниц, вряд ли он имеет сложную логику бизнес-процессов, которую можно сломать.</li>
14 <ul><li>Вы разрабатываете сайт-визитку с одной формой отправки заявки. Даже если сайт состоит из нескольких статических страниц, вряд ли он имеет сложную логику бизнес-процессов, которую можно сломать.</li>
15 <li>Вы создаете рекламный сайт или баннеры То есть работаете с анимацией, сложной версткой и статикой. В этом случае фокус на представлении информации, а не логике бизнес-процессов.</li>
15 <li>Вы создаете рекламный сайт или баннеры То есть работаете с анимацией, сложной версткой и статикой. В этом случае фокус на представлении информации, а не логике бизнес-процессов.</li>
16 <li>Вы делаете MVP с приблизительным результатом в короткие сроки для работы на выставке в течение двух дней. В таком случае достаточно базового функционала: тесты только усложнят и затянут разработку.</li>
16 <li>Вы делаете MVP с приблизительным результатом в короткие сроки для работы на выставке в течение двух дней. В таком случае достаточно базового функционала: тесты только усложнят и затянут разработку.</li>
17 </ul><h2>Как провести модульное тестирование?</h2>
17 </ul><h2>Как провести модульное тестирование?</h2>
18 <p>Модульное тестирование кода обычно проводят программисты. Процесс включает несколько этапов:</p>
18 <p>Модульное тестирование кода обычно проводят программисты. Процесс включает несколько этапов:</p>
19 <ol><li>Написание кода юнита.</li>
19 <ol><li>Написание кода юнита.</li>
20 <li>Проверка изолированности модуля. Если он связан с другими функциями, то модуль переписывают для устранения этой связи.</li>
20 <li>Проверка изолированности модуля. Если он связан с другими функциями, то модуль переписывают для устранения этой связи.</li>
21 <li>Создание реакции других модулей с помощью моков - имитаторов. Они передадут данные для получения реакции тестируемого юнита.</li>
21 <li>Создание реакции других модулей с помощью моков - имитаторов. Они передадут данные для получения реакции тестируемого юнита.</li>
22 <li>Написание тестов и исправление ошибок.</li>
22 <li>Написание тестов и исправление ошибок.</li>
23 <li>Запуск unit тестов для проверки полноты покрытия тестирования строк функции.</li>
23 <li>Запуск unit тестов для проверки полноты покрытия тестирования строк функции.</li>
24 </ol><p>Протестированный по этой логике код можно получить уже за пару итераций.</p>
24 </ol><p>Протестированный по этой логике код можно получить уже за пару итераций.</p>
25 <h3>Инструменты для модульного тестирования</h3>
25 <h3>Инструменты для модульного тестирования</h3>
26 <p>Unit тесты не обязательно писать с нуля. Для большинства языков программирования есть фреймворки с готовыми решениями. Для Python можно выбрать Pytest или Unittest, для Javascript - Jest.</p>
26 <p>Unit тесты не обязательно писать с нуля. Для большинства языков программирования есть фреймворки с готовыми решениями. Для Python можно выбрать Pytest или Unittest, для Javascript - Jest.</p>
27 <h3>Как максимально покрыть код unit тестами?</h3>
27 <h3>Как максимально покрыть код unit тестами?</h3>
28 <p>На больших и сложных проектах стопроцентного покрытия кода тестами достичь сложно. К тому же, это нерационально. Показатель 70-90% считается хорошим. Он позволяет выявить максимальное количество ошибок. Мы собрали несколько практических советов по увеличению процента покрытия кода:</p>
28 <p>На больших и сложных проектах стопроцентного покрытия кода тестами достичь сложно. К тому же, это нерационально. Показатель 70-90% считается хорошим. Он позволяет выявить максимальное количество ошибок. Мы собрали несколько практических советов по увеличению процента покрытия кода:</p>
29 <ul><li>Пишите unit тест на каждый новый код сразу же.</li>
29 <ul><li>Пишите unit тест на каждый новый код сразу же.</li>
30 <li>Используйте готовые решения - тестовые фреймворки.</li>
30 <li>Используйте готовые решения - тестовые фреймворки.</li>
31 <li>Создавайте тесты для проверки только одной функции.</li>
31 <li>Создавайте тесты для проверки только одной функции.</li>
32 <li>Используйте негативные тесты для проверки поведения программы в случае ввода неправильных данных.</li>
32 <li>Используйте негативные тесты для проверки поведения программы в случае ввода неправильных данных.</li>
33 <li>Используйте мутационные фреймворки с функцией изменения констант и условий для проверки качества unit тестов.</li>
33 <li>Используйте мутационные фреймворки с функцией изменения констант и условий для проверки качества unit тестов.</li>
34 <li>Проверяйте тесты на стабильность.</li>
34 <li>Проверяйте тесты на стабильность.</li>
35 <li>Следите за скоростью выполнения теста.</li>
35 <li>Следите за скоростью выполнения теста.</li>
36 </ul><p>Детально изучить юнит-тестирование с использованием специального фреймворка вы можете на курсе "<a>Тестирование с Pytest"</a>. Еще в рамках курса можно прокачать навык функционального тестирования. На изучение понадобится всего около 13 часов.</p>
36 </ul><p>Детально изучить юнит-тестирование с использованием специального фреймворка вы можете на курсе "<a>Тестирование с Pytest"</a>. Еще в рамках курса можно прокачать навык функционального тестирования. На изучение понадобится всего около 13 часов.</p>