Как создать и использовать тестовую модель (модель для тестирования)?

«Как создать и использовать тестовую модель (модель для тестирования)?» — вопрос из категории Тестовая документация, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестовая модель — это упрощенное представление системы или её части, используемое для проверки логики. Её создание включает:

  1. Определение границ и ответственности

    • Четко задайте, что модель проверяет (валидация входных данных, бизнес-правила, состояния).
  2. Подготовка тестовых данных

    • Используйте моки (fake objects) для замены внешних зависимостей.
    • Используйте стабы (stubs) для предоставления заданных ответов.
    • Генерируйте данные, покрывающие основные сценарии: валидные, граничные, невалидные.
  3. Реализация и изоляция тестов

    • Каждый тест должен быть независимым. Используйте методы setUp/tearDown для подготовки и очистки окружения.
    • Пример на Python с pytest и моком:
      
      import pytest
      from unittest.mock import Mock

    Тестируемый сервис, зависящий от внешнего API

    class PaymentService: def init(self, gateway): self.gateway = gateway def process(self, amount): if amount <= 0: raise ValueError("Amount must be positive") return self.gateway.charge(amount)

    def test_payment_service_success():

    1. Создаем мок-объект для шлюза

    mock_gateway = Mock()
    mock_gateway.charge.return_value = {"status": "success", "id": "tx_123"}
    
    # 2. Инжектируем мок в тестируемый сервис
    service = PaymentService(mock_gateway)
    
    # 3. Выполняем действие и проверяем результат
    result = service.process(100)
    assert result["status"] == "success"
    # 4. Проверяем, что мок был вызван с правильными аргументами
    mock_gateway.charge.assert_called_once_with(100)

    def test_payment_service_invalid_amount(): service = PaymentService(Mock()) with pytest.raises(ValueError, match="Amount must be positive"): service.process(0) # Проверка граничного/невалидного значения

    
    **Ключевой принцип:** Модель должна быть простой, предсказуемой и полностью контролируемой в рамках теста.