0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В какой момент лучше писать тесты? Вообще, существует три подхода:</p>
1
<p>В какой момент лучше писать тесты? Вообще, существует три подхода:</p>
2
<ul><li>Тесты пишутся после кода</li>
2
<ul><li>Тесты пишутся после кода</li>
3
<li>Тесты пишутся вместе с кодом</li>
3
<li>Тесты пишутся вместе с кодом</li>
4
<li>Тесты пишутся до кода</li>
4
<li>Тесты пишутся до кода</li>
5
</ul><p>В этом уроке мы разберемся, в чем особенности каждого подхода.</p>
5
</ul><p>В этом уроке мы разберемся, в чем особенности каждого подхода.</p>
6
<h2>Подход "Тесты после кода"</h2>
6
<h2>Подход "Тесты после кода"</h2>
7
<p>В некоторых ситуациях особого выбора нет. Например, при системном тестировании тесты должны имитировать поведение пользователей и выполнять действия в браузере. Такие тесты пишутся после кода.</p>
7
<p>В некоторых ситуациях особого выбора нет. Например, при системном тестировании тесты должны имитировать поведение пользователей и выполнять действия в браузере. Такие тесты пишутся после кода.</p>
8
<p>В интеграционных, модульных и других тестах низкого уровня программист может выбирать из вариантов, описанных выше.</p>
8
<p>В интеграционных, модульных и других тестах низкого уровня программист может выбирать из вариантов, описанных выше.</p>
9
<h2>Подход "Тесты до кода"</h2>
9
<h2>Подход "Тесты до кода"</h2>
10
<p>Подход "писать тесты после кода" относится к наименее полезным. Разберемся, почему так. Сам процесс написания кода связан с постоянным запуском кода и проверкой того, что он работает. В самых простых задачах, этот запуск происходит довольно быстро:</p>
10
<p>Подход "писать тесты после кода" относится к наименее полезным. Разберемся, почему так. Сам процесс написания кода связан с постоянным запуском кода и проверкой того, что он работает. В самых простых задачах, этот запуск происходит довольно быстро:</p>
11
<p>В реальном коде подготовка данных для проверки работы кода может занимать минуты и десятки минут. С другой стороны, результатом работы проверяемого кода может быть что-то сложное - например, множество записей в базе данных или вывод определенной непростой структуры.</p>
11
<p>В реальном коде подготовка данных для проверки работы кода может занимать минуты и десятки минут. С другой стороны, результатом работы проверяемого кода может быть что-то сложное - например, множество записей в базе данных или вывод определенной непростой структуры.</p>
12
<p>Тогда каждый запуск кода на проверку превращается в целое приключение:</p>
12
<p>Тогда каждый запуск кода на проверку превращается в целое приключение:</p>
13
<p>Именно здесь на сцену выходит вариант "писать тесты до кода". У многих начинающих разработчиков эта фраза вызывает ступор. Как можно писать тесты до того, как написан код? Оказывается, можно.</p>
13
<p>Именно здесь на сцену выходит вариант "писать тесты до кода". У многих начинающих разработчиков эта фраза вызывает ступор. Как можно писать тесты до того, как написан код? Оказывается, можно.</p>
14
<p>Допустим, мы хотим написать функцию, которая может повторять переданную строчку указанное количество раз:</p>
14
<p>Допустим, мы хотим написать функцию, которая может повторять переданную строчку указанное количество раз:</p>
15
<p>Мы знаем две важные вещи:</p>
15
<p>Мы знаем две важные вещи:</p>
16
<ul><li>Что это<a>чистая функция</a></li>
16
<ul><li>Что это<a>чистая функция</a></li>
17
<li>Что именно эта функция принимает на вход</li>
17
<li>Что именно эта функция принимает на вход</li>
18
</ul><p>Зная это, мы уже можем написать тесты:</p>
18
</ul><p>Зная это, мы уже можем написать тесты:</p>
19
<p>Опытный разработчик напишет такой код за 15-20 секунд. Зато теперь для проверки работы этого кода достаточно набрать uv run pytest в консоли.</p>
19
<p>Опытный разработчик напишет такой код за 15-20 секунд. Зато теперь для проверки работы этого кода достаточно набрать uv run pytest в консоли.</p>
20
<p>У тестирования до написания кода есть еще одно мощное преимущество - оно заставляет программиста думать не о коде, а о дизайне своего решения. Это подталкивает программиста размышлять о том, как люди будут пользоваться его приложением. Так создаются грамотные интерфейсы, а это часто залог успеха.</p>
20
<p>У тестирования до написания кода есть еще одно мощное преимущество - оно заставляет программиста думать не о коде, а о дизайне своего решения. Это подталкивает программиста размышлять о том, как люди будут пользоваться его приложением. Так создаются грамотные интерфейсы, а это часто залог успеха.</p>
21
<h2>Подход "Тесты во время кода"</h2>
21
<h2>Подход "Тесты во время кода"</h2>
22
<p>В мире разработки есть подход, при котором тесты пишутся во время кода. Он называется<strong>разработкой через тестирование</strong>(Test-Driven Development или TDD):</p>
22
<p>В мире разработки есть подход, при котором тесты пишутся во время кода. Он называется<strong>разработкой через тестирование</strong>(Test-Driven Development или TDD):</p>
23
<p>По задумке изобретателя этой техники разработка через тестирование подразумевает, что вся разработка состоит из повторяющегося цикла:</p>
23
<p>По задумке изобретателя этой техники разработка через тестирование подразумевает, что вся разработка состоит из повторяющегося цикла:</p>
24
<ul><li>На каждой итерации пишется тест</li>
24
<ul><li>На каждой итерации пишется тест</li>
25
<li>Тест не проходит</li>
25
<li>Тест не проходит</li>
26
<li>Программисты дописывают код, удовлетворяющий этому тесту</li>
26
<li>Программисты дописывают код, удовлетворяющий этому тесту</li>
27
</ul><p>После этого все повторяется. В итоге шаг за шагом строится приложение.</p>
27
</ul><p>После этого все повторяется. В итоге шаг за шагом строится приложение.</p>
28
<p>Сейчас все по инерции продолжают говорить именно о таком способе. В нем тесты пишутся на все части кода с максимальной детализацией. Этот вид TDD говорит о важности дизайна, но фокусируется на конкретных функциях и классах приложения вместо цельной картины.</p>
28
<p>Сейчас все по инерции продолжают говорить именно о таком способе. В нем тесты пишутся на все части кода с максимальной детализацией. Этот вид TDD говорит о важности дизайна, но фокусируется на конкретных функциях и классах приложения вместо цельной картины.</p>
29
<p>Но есть и другой подход к TDD, где тесты на внутренние части не пишутся почти никогда. Подробнее об этом в статье в дополнительных материалах.</p>
29
<p>Но есть и другой подход к TDD, где тесты на внутренние части не пишутся почти никогда. Подробнее об этом в статье в дополнительных материалах.</p>