TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1377 1.6K
День 1114. #Testing
Вы Неправильно Называете Тесты! Продолжение
Начало

Для примера попробуем улучшить название теста, используя приведённые выше рекомендации. Вот тест, проверяющий, что доставка с истекшей датой недействительна. Название теста написано с использованием жёсткой политики именования, что не способствует читабельности теста:
[Fact]
public void IsDeliveryValid_InvalidDate_ReturnsFalse()
{
var sut = new DeliveryService();
var pastDate = DateTime.Now.AddDays(-1);
Delivery delivery = new Delivery
{
Date = pastDate
};

var valid = sut.IsDeliveryValid(delivery);

Assert.False(valid);
}

Тест проверяет, правильно ли DeliveryService идентифицирует доставку с неправильной датой как недействительную. Выразим название на простом языке:
Delivery_with_invalid_date_should_be_considered_invalid()

Обратите внимание на две вещи в новой версии:
1. Имя теперь имеет смысл для непрограммиста. Это означает, что и программистам будет легче понять его.
2. Имя метода IsDeliveryValid больше не является частью имени теста.

Не включайте название метода в название теста. Вы не тестируете код, вы тестируете поведение приложения. Поэтому не имеет значения, как называется тестируемый метод. Вы можете решить переименовать тестируемый метод, скажем, в IsDeliveryCorrect, и это не повлияет на поведение тестируемой системы. А если вы следуете исходному соглашению об именах, вам придётся переименовать и тест. Это связывает тесты с деталями реализации кода, что негативно влияет на удобство сопровождения набора тестов.

Единственным исключением из этого правила является работа над служебным кодом. Он не содержит бизнес-логики — его поведение не выходит за рамки простого вспомогательного функционала и здесь можно использовать имена методов.

Вернёмся к нашему примеру. Имя теста всё ещё можно улучшить. Что именно означает, что дата доставки недействительна? Глядя на тест, мы видим, что недействительной датой является любая дата в прошлом. То есть должно быть разрешено выбирать дату доставки только в будущем. Отразим это в имени теста:
Delivery_with_past_date_should_be_considered_invalid()

Слишком длинно. Уберём лишние слова без потери смысла. Кроме того, формулировка should_be - ещё один распространённый анти-паттерн. Тест проверяет поведение: правильное оно или нет. Здесь нет места желаниям или стремлениям:
Delivery_with_past_date_is_invalid()

Готово. Окончательная версия представляет собой прямое изложение факта, который описывает один из аспектов поведения тестируемого приложения. В данном случае аспект определения того, может ли быть осуществлена доставка.

Окончание следует…

Источник:
https://enterprisecraftsmanship.com/posts/you-naming-tests-wrong/
More from @netdeveloperdiary
  1. Oct 15, 2026Post #3374
  2. Oct 14, 2026Post #3373
  3. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  4. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  5. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  6. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →