Общие ссылки
- Тестирование в Python [unittest]. Часть 2. TestCase
- Behave is behavior-driven development, Python style.
- Модуль unittest: тестируем свои программы
- Тестирование в Python [unittest] Часть1 Часть2 Часть3 Часть4
- Погружаемся в основы и нюансы тестирования Python-кода
- Эффективное тестирование Python с Pytest
- Pytest — Краткое руководство
- UnitTest Framework Tutorial
- Юнит-тестирование Python
Фреймворки тестирования
- unittest - встроен в стандартную библиотеку Python. Он содержит и тестовую среду, и Test Runner.
- nose или nose2
- pytest - поддерживает тесты, созданные с unittest. Его плюс заключается в особенностях написания TestCase. TestCase в pytest — это серия функций в файле Python, которые начинаются с имени test_.
unittest
источник: https://devpractice.ru/unit-testing-in-python-part-2/
элементы unittest
- Test fixture – обеспечивает подготовку окружения для выполнения тестов, а также организацию мероприятий по их корректному завершению (например очистка ресурсов).
- Test case – это элементарная единица тестирования, в рамках которой проверяется работа компонента тестируемой программы (метод, класс, поведение и т.п.). Для реализации этой сущности используется класс TestCase.
- Test suite – это коллекция тестов, которая может в себя включать как отдельные test case’ы так и целые коллекции (т.е. можно создавать коллекции коллекций). Коллекции используются с целью объединения тестов для совместного запуска.
- Test runner – это компонент, которые оркестрирует (координирует взаимодействие) запуск тестов и предоставляет пользователю результат их выполнения.
интерфейс командной строки
- запуск всех тестов
python -m unittest test_calc.py
- Запуск тестов из класса CalcTest.
python -m unittest utest_calc.CalcTest
- запуск Test Discovery
python -m unittest
Работа с TestCase
При выборе имени класса наследника от TestCase можете руководствоваться следующим правилом: [ИмяТестируемойСущности]Tests. [ИмяТестируемойСущности] – это некоторая логическая единица, тесты для которой нужно написать.
имена тестов будем начинать с префикса test_. Далее, под словом тест будем понимать метод класса-наследника от TestCase, который начинается с префикса test_.
Все методы класса TestCase можно разделить на три группы: * методы, используемые при запуске тестов; * методы, используемые при непосредственном написании тестов (проверка условий, сообщение об ошибках); * методы, позволяющие собирать информацию о самом тесте.
Методы, используемые при запуске тестов.
- setUp() - вызывается перед запуском теста, используется для подготовки окружения для теста.
- tearDown() - вызывается после завершения работы теста/
методы setUp() и tearDown() вызываются для всех тестов в рамках класса, в котором они переопределены.
- setUpClass() - Метод действует на уровне класса, т.е. выполняется перед запуском тестов класса.
@classmethod
def setUpClass(cls):
...
- tearDownClass() - запускается после выполнения всех методов класса
@classmethod
def tearDownClass(cls):
...
- fail(msg=None) - метод сигнализирует о том, что произошла ошибка в тесте.
- countTestCases() - Возвращает количество тестов в объекте класса-наследника от TestCase.
-
id() - Возвращает строковый идентификатор теста. Как правило это полное имя метода, включающее имя модуля и имя класса.
-
TestCase класс предоставляет набор assert-методов для проверки и генерации ошибок:
- assertEqual(a, b) a == b - assertNotEqual(a, b) a != b - assertTrue(x) bool(x) is True - assertFalse(x) bool(x) is False - assertIs(a, b) a is b - assertIsNot(a, b) a is not b - assertIsNone(x) x is None - assertIsNotNone(x) x is not None - assertIn(a, b) a in b - assertNotIn(a, b) a not in b - assertIsInstance(a, b) isinstance(a, b) - assertNotIsInstance(a, b) not isinstance(a, b)
-
Assert’ы для контроля выбрасываемых исключений и warning’ов:
- assertRaises(exc, fun, *args, **kwds) - Функция fun(*args, **kwds) вызывает исключение exc - assertRaisesRegex(exc, r, fun, *args, **kwds) - Функция fun(*args, **kwds) вызывает исключение exc, сообщение которого совпадает с регулярным выражением r - assertWarns(warn, fun, *args, **kwds) - Функция fun(*args, **kwds) выдает сообщение warn - assertWarnsRegex(warn, r, fun, *args, **kwds) - Функция fun(*args, **kwds) выдает сообщение warn и оно совпадает с регулярным выражением r
-
Assert’ы для проверки различных ситуаций:
- assertAlmostEqual(a, b) round(a-b, 7) == 0 - assertNotAlmostEqual(a, b) round(a-b, 7) != 0 - assertGreater(a, b) a > b - assertGreaterEqual(a, b) a >= b - assertLess(a, b) a < b - assertLessEqual(a, b) a <= b - assertRegex(s, r) r.search(s) - assertNotRegex(s, r) not r.search(s) - assertCountEqual(a, b) a и b имеют одинаковые элементы (порядок неважен)
-
ипо-зависимые assert’ы, которые используются при вызове assertEqual(). Приводятся на тот случай, если необходимо использовать конкретный метод.
- assertMultiLineEqual(a, b) строки (strings) - assertSequenceEqual(a, b) последовательности (sequences) - assertListEqual(a, b) списки (lists) - assertTupleEqual(a, b) кортежи (tuplse) - assertSetEqual(a, b) множества или неизменяемые множества (frozensets) - assertDictEqual(a, b) словари (dicts)