Что такое атомарные тесты и как их правильно писать

«Что такое атомарные тесты и как их правильно писать» — вопрос из категории Тестирование, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Атомарный (или изолированный) тест проверяет одну, и только одну, единицу функциональности и не зависит от состояния, созданного другими тестами. Его результат не должен меняться от порядка запуска.

Ключевые принципы:

  1. Изоляция (Isolation): Каждый тест должен работать в собственном, предсказуемом окружении. Данные, созданные в одном тесте, не должны быть доступны в другом. Для этого используются фикстуры (pytest) или методы setUp/tearDown (unittest).
  2. Независимость (Independence): Тест не должен полагаться на успешное выполнение другого теста. Его можно запустить отдельно, и он должен работать.
  3. Одна проверка (Single Assertion): В идеале, тест должен содержать одну логическую проверку (assert), чтобы при падении было сразу понятно, что именно сломалось.

Пример с pytest и фикстурами для изоляции:

import pytest

# Фикстура создает изолированный объект для каждого теста, который ее использует.
# Перед каждым тестом будет новый счет с балансом 100.
@pytest.fixture
def user_account():
    """Создает новый банковский счет с балансом 100."""
    return {"balance": 100}

def test_deposit(user_account):
    """Тест проверяет только операцию пополнения."""
    user_account["balance"] += 50
    assert user_account["balance"] == 150

def test_withdrawal(user_account):
    """Тест проверяет только операцию снятия."""
    user_account["balance"] -= 30
    assert user_account["balance"] == 70

Такой подход делает тесты надежными, легко отлаживаемыми и быстрыми, так как их можно запускать параллельно.