Ответ
В Python тестирование реализуется с помощью стандартного модуля unittest
или сторонних библиотек, таких как pytest
. Основные виды тестов включают:
-
Unit-тесты — тестируют отдельные функции или методы в изоляции, проверяя их корректность и предсказуемость поведения.
import unittest def add(a, b): return a + b class TestAdd(unittest.TestCase): def test_add_positive_numbers(self): self.assertEqual(add(2, 3), 5) def test_add_negative_numbers(self): self.assertEqual(add(-1, -1), -2)
-
Интеграционные тесты — проверяют взаимодействие нескольких компонентов системы (например, функции с базой данных или API), убеждаясь, что они работают вместе как ожидается.
# Пример с использованием фикстуры pytest для подключения к БД def create_user(db_connection, username): # Логика создания пользователя в БД db_connection.execute(f"INSERT INTO users (username) VALUES ('{username}')") return {'username': username} def test_user_creation(db_connection_fixture): user_data = create_user(db_connection_fixture, "test_user") assert user_data['username'] == "test_user" # Дополнительная проверка, что пользователь действительно в БД
-
Mock-тесты — заменяют внешние зависимости (например, базы данных, сторонние API-сервисы, файловую систему) на заглушки (
mocks
) или шпионы (spies
), позволяя изолировать тестируемый компонент и контролировать его окружение.from unittest.mock import Mock def process_api_response(response_data): # Предположим, эта функция обрабатывает ответ от внешнего API return response_data.get("status") def test_api_call_processing(): mock_api_response = Mock(return_value={"status": "ok", "data": []}) result = process_api_response(mock_api_response()) assert result == "ok" mock_api_response.assert_called_once() # Проверяем, что заглушка была вызвана
-
Parametrized тесты — позволяют запускать один и тот же тест с различными наборами входных данных, что упрощает тестирование функции с множеством сценариев без дублирования кода.
import pytest def multiply(a, b): return a * b @pytest.mark.parametrize("a, b, expected", [ (1, 2, 2), (0, 5, 0), (-1, 3, -3), (10, 0.5, 5.0) ]) def test_multiply(a, b, expected): assert multiply(a, b) == expected
Помимо перечисленных, в Python также активно используются тесты с фикстурами (для подготовки тестового окружения), асинхронные тесты (для асинхронного кода) и тесты для специфичных фреймворков (например, Django, Flask). pytest
часто выбирают за его лаконичность, мощные фичи и расширяемость.