Ответ
Сверка осуществляется с помощью утверждений (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:
- Один assert — одна логическая проверка. Это упрощает понимание причины падения.
- Информативные сообщения об ошибке. Всегда добавляйте поясняющее сообщение в assert.
- Используйте матчеры (matchers) из библиотек (Hamcrest, AssertJ) для сложных проверок (коллекции, исключения, частичные совпадения).
- Проверяйте не только "счастливый путь", но и граничные условия, а также ожидаемые ошибки (например,
assertThrows). - Избегайте зависимых утверждений в одном тесте — если упало первое, следующие не выполнятся, скрывая потенциальные другие проблемы.