Как в автоматизированном тесте сверяются ожидаемый и фактический результат?

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

Ответ

Сверка осуществляется с помощью утверждений (assertions) — специальных проверок, которые сравнивают ожидаемое значение с фактическим и вызывают падение теста в случае несоответствия.

Основные принципы и примеры:

  • Простое сравнение (Python, pytest):

    def test_calculate_total():
        expected_total = 150
        actual_total = calculate_total([50, 100]) # Вызов тестируемой функции
        assert actual_total == expected_total, 
            f"Некорректная сумма. Ожидалось: {expected_total}, Получено: {actual_total}"
  • Сравнение сложных структур (Python):

    def test_api_response():
        expected_data = {"id": 1, "status": "active", "items": ["apple"]}
        actual_data = api.get_user(1) # Получаем ответ от API
    
        # Глубокое сравнение словарей
        assert actual_data == expected_data
        # Или точечные проверки
        assert actual_data["status"] == "active"
        assert len(actual_data["items"]) > 0
  • Использование специализированных assertion-библиотек (повышают читаемость):

    # pytest с утверждениями в стиле `assert actual == expected`
    # или используем `assert actual == expected`
    // AssertJ (Java)
    assertThat(actualList).containsExactly("a", "b", "c");
    assertThat(actualUser).hasFieldOrPropertyWithValue("name", "Alice");

Best Practices:

  1. Один assert — одна логическая проверка. Это упрощает понимание причины падения.
  2. Информативные сообщения об ошибке. Всегда добавляйте поясняющее сообщение в assert.
  3. Используйте матчеры (matchers) из библиотек (Hamcrest, AssertJ) для сложных проверок (коллекции, исключения, частичные совпадения).
  4. Проверяйте не только "счастливый путь", но и граничные условия, а также ожидаемые ошибки (например, assertThrows).
  5. Избегайте зависимых утверждений в одном тесте — если упало первое, следующие не выполнятся, скрывая потенциальные другие проблемы.