unittest — Фреймворк тестирования

Модуль unittest (вдохновленный JUnit) предоставляет богатый набор инструментов для написания и запуска тестов.

import unittest

Базовый тест

import unittest

def add(a, b): return a + b

class TestMath(unittest.TestCase):
    
    def setUp(self):
        # Выполняется перед каждым тестом
        self.a = 10
        self.b = 5

    def test_add(self):
        # Имя метода должно начинаться с 'test_'
        self.assertEqual(add(self.a, self.b), 15)

if __name__ == '__main__':
    unittest.main()

Основные проверки (Assertions)

self.assertEqual(a, b)      # Равенство
self.assertTrue(x)          # Истинность
self.assertIsNone(x)        # Проверка на None
self.assertIn(a, b)         # Вхождение

Тестирование исключений

def test_error(self):
    with self.assertRaises(ValueError):
        int("не число")

Пропуск тестов

import sys

@unittest.skip("В разработке")
def test_future(self): pass

@unittest.skipIf(sys.platform == "win32", "Не для Windows")
def test_linux(self): pass

Моки (unittest.mock)

from unittest.mock import patch
import unittest

class TestAPI(unittest.TestCase):
    @patch('requests.get')
    def test_api_call(self, mock_get):
        mock_get.return_value.json.return_value = {'name': 'Alice'}
        # ... тест с использованием замоканного запроса ...

Запуск тестов

# Все тесты в файле
python -m unittest test_file.py

# Автоматический поиск тестов в папке
python -m unittest discover

Официальная документация

unittest — Unit testing framework

Полный справочник API (API Reference)

Основные классы и методы

Класс/Метод Описание
unittest.TestCase Базовый класс для создания набора тестов.
TestCase.setUp() Метод, вызываемый ПЕРЕД каждым тестом в классе (подготовка).
TestCase.tearDown() Метод, вызываемый ПОСЛЕ каждого теста (очистка).
TestCase.assertEqual(a, b) Проверка равенства a == b.
TestCase.assertTrue(x) Проверка истинности bool(x) == True.
TestCase.assertRaises(exc) Менеджер контекста: проверяет, генерирует ли код исключение exc.

Мокирование (Mock)

Объект Описание
unittest.mock.MagicMock Объект-"заглушка", у которого реализованы все магические методы Python (можно подставить вместо реального объекта).
@unittest.mock.patch() Декоратор для временной (на время теста) замены (мока) функции или класса по указанному пути.