Ответ
Один тест-кейс должен проверять один конкретный ожидаемый результат (Assertion). Это фундаментальный принцип модульного и атомарного тестирования.
Почему это важно:
- Локализация дефектов: Если тест падает, сразу понятно, какая именно функциональность сломана.
- Читаемость: Название теста (
testLogin_WithValidCredentials_ReturnsTrue) четко описывает его цель. - Поддержка: Легко обновлять и рефакторить небольшие, сфокусированные тесты.
Правильный пример (Python/pytest):
def test_login_with_valid_credentials_returns_true():
# Arrange
auth_service = AuthService()
# Act
result = auth_service.login(username="valid_user", password="correct_pass")
# Assert - ОДНА проверка
assert result is True
Неправильный пример (проверка нескольких несвязанных вещей):
def test_login():
result = login(...)
assert result is True # Проверка успешного входа
assert current_user.name == "valid_user" # НЕОТНОСЯЩАЯСЯ проверка - это должен быть отдельный тест!
assert session.is_active() # Еще одна несвязанная проверка
Если нужно проверить несколько аспектов одного сценария, разбейте его на несколько независимых тест-кейсов.
Ответ 18+ 🔞
А, слушай, вот этот принцип тестирования — один тест, одна проверка. Это ж как в армии, блядь: один солдат — одна винтовка, а не чтобы он сразу и стрелял, и в окопе копал, и кашу варил, ёпта!
Зачем это, спросишь? Да чтобы, если всё накрылось медным тазом, сразу было понятно, где именно пиздец случился. Представь: у тебя тест упал, а там тридцать три проверки в одной куче. И что, блядь? Где искать? В рот меня чих-пых! А так — упал один мелкий тестик, и ты сразу знаешь: «Ага, сука, вот эта конкретная хуйня не работает».
Смотри, как правильно, на примере:
def test_login_with_valid_credentials_returns_true():
# Подготовка (Arrange) — расставляем фигурки
auth_service = AuthService()
# Действие (Act) — нажимаем на кнопку
result = auth_service.login(username="valid_user", password="correct_pass")
# Проверка (Assert) — ОДНА, блядь, единственная!
assert result is True
Всё, чисто, ясно. Тест называется «проверить, что с валидными данными возвращает True». Упал? Значит, логин с валидными данными не работает. Элементарно, Ватсон!
А вот как НЕ НАДО, ёпта:
def test_login():
result = login(...)
assert result is True # Проверяем вход
assert current_user.name == "valid_user" # А это уже, блядь, другая операция — загрузка пользователя!
assert session.is_active() # И это вообще третья, ёперный театр!
Это ж какой-то винегрет, а не тест! Он упадёт — и ты будешь как тот Герасим из рассказа: «Мууу? Ууу?», нихуя не понимая, что именно сломалось. То ли логин, то ли сессия, то ли ещё какая хитрая жопа.
Вывод простой, как три копейки: Если тебе нужно проверить кучу всего в одном сценарии — раздроби эту хуйню на кучу маленьких, независимых тестов. Один — проверил логин. Второй — проверил, что имя пользователя подгрузилось. Третий — что сессия активна. И тогда у тебя будет порядок, а не бардак, доверия ебать ноль.