Как происходит модульное тестирование в Python
Без тестирования не создать качественное веб-приложение. Рассказываем, как протестировать код на Python.
vlada_maestro / shutterstock
Что такое модульное тестирование
Модульное тестирование позволяет проверить, правильно ли работают отдельные части программы и соответствуют ли они заявленным требованиям. Разработчики используют модульные, или unit-тесты
по-разному, в зависимости от ситуации и задач:
- при подходе TDD (Test-Driven Development, разработка через тестирование) пишут тесты до начала создания приложения, а потом ориентируются на них в процессе программирования;
- при рефакторинге всей кодовой базы или отдельных ее частей тесты пишут перед началом изменения программы, чтобы не «поломать» ее функциональность;
- при найденных в программе багах unit-тесты пишут для удобства их отслеживания и исправления.
Модуль применительно к unit-тестированию — это наименьший компонент, который можно скомпилировать.
Для модульного тестирования в языке Python есть встроенный модуль PyUnit (unittest). Вот некоторые из его преимуществ:
- возможность автоматизированного тестирования;
- возможность собирать тесты в группы;
- уменьшение дублирования кода при схожих объектах тестирования благодаря ООП-стилю;
- возможность собирать результаты выполнения тестов для отчета.
Инструментарий unittest состоит из четырех основных частей:
- test case — то, из чего собираются тесты, наименьшая единица тестирования;
- test fixture — среда выполнения тестов, используется для упрощения подготовки нужного состояния test case, тем самым экономя время;
- test suite — набор готовых тестовых случаев, позволяет упорядочить и управлять комплектами тестов;
- test runner — компонент, который запускает тесты и выводит пользователю результат.
Помимо встроенного unittest, существует много фреймворков для тестирования кода на Python: Pytest, Nose, Allure, Selene, Selenium и другие.
Пример: тестирование приложения с помощью unittest
Допустим, у нас есть файл calc.py с набором функций. Чтобы протестировать его, нужно сначала создать файл utest_calc.py. Затем добавить в него следующий код:
import unittest
import calc
class CalcTest (unittest.TestCase):
def test_add (self):
self.assertEqual (calc.add (1, 2), 3)
def test_sub (self):
self.assertEqual (calc.sub (4, 2), 2)
def test_mul (self):
self.assertEqual (calc.mul (2, 5), 10)
def test_div (self):
self.assertEqual (calc.div (8, 4), 2)
if __name__ == '__main__':
unittest.main ()
Пора запустить его:
Теперь вы увидите краткую информацию о том, что все тесты успешно пройдены:
…
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK