Какие инструменты для тестирования в Python вы знаете и как написать простой тест с помощью pytest

Ответ

В Python существует несколько фреймворков для тестирования, но основными являются:

  • unittest: Входит в стандартную библиотеку Python. Основан на xUnit, требует создания классов для тестов и использования специальных assert методов (например, self.assertEqual()).
  • pytest: Де-факто стандарт в сообществе. Отличается простым синтаксисом (использует стандартный assert), мощной системой фикстур, плагинами и подробными отчетами об ошибках.

Написание теста с pytest

pytest автоматически обнаруживает файлы test_*.py или *_test.py и функции test_* в них.

1. Код для тестирования (например, calculator.py):

# calculator.py

class CalculationError(Exception):
    pass

def add(a: int, b: int) -> int:
    if not isinstance(a, int) or not isinstance(b, int):
        raise TypeError("Оба аргумента должны быть целыми числами")
    return a + b

2. Файл с тестами (test_calculator.py):

# test_calculator.py
import pytest
from calculator import add, CalculationError

# Простой тест на корректное сложение
def test_add_positive_numbers():
    assert add(2, 3) == 5

# Параметризованный тест для проверки нескольких случаев
@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),      # Положительные числа
    (-1, -1, -2),   # Отрицательные числа
    (-5, 5, 0),     # Смешанные числа
    (0, 0, 0)       # Нули
])
def test_add_various_cases(a, b, expected):
    assert add(a, b) == expected

# Тест на проверку вызова исключения
def test_add_raises_type_error_for_strings():
    with pytest.raises(TypeError):
        add("a", "b")

Для запуска тестов достаточно выполнить в терминале команду pytest. Фреймворк сам найдет и выполнит все тесты, предоставив детальный отчет.