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>