>> Речь шла не о рефакторинге, а о написании кода в первый раз
Это спор о терминах. Автор предлагает один код вместо другого, но их поведение не эквивалентно.
>>Да и при рефакторинге менять поведение — также допустимо, просто изучать и переписывать в таком случае надо больше кода.
Как бы то ни было автор предлагает именно этот кусок кода. Мы можем предположить, что он изолирован от всего остального.
public void Process()
{
int result = DoProcess(new Order(), null);
}
private int DoProcess(Order order, Processor processor)
{
return processor?.Process(order) ?? 0;
}
Если processor == null, то нужно вернуть 0. Если бы DoProcess был бы открытым, то мы вынуждены были бы оставить это поведение при рефакторинге. Соответственно, оставили бы как одну из допустимых веток кода.
Сработает. Но на .NET уже написано много кода с использованием значимых типов. А это значит, что «подставить» везде "?." вместо "." — отказаться от обратной совместимости.
public void Process()
{
var processor = new EmptyProcessor();
int result = DoProcess(new Order(), processor);
}
private int DoProcess(Order order, Processor processor)
{
return processor.Process(order);
}
Если DoProcess не был бы приватным, то все равно пришлось бы писать проверку на null.
BDD не отменяет возможность использования NUnit. Просто эти тесты будут интеграционными.
Оборачивание 5ти вызовов API в человекочитаемый вид имеет не только плюсы, но и минусы. Например, любые изменения в API нужно будет руками править в тестах. Как часто человек, не знающий языка программирования заглядывает в тесты проекта? Стоит ли ради этого отказываться от нормальной поддержи тестов?
Вот уже как лет пять слежу за SpecFlow, даже пробовал не раз, но никак не пойму, как его использовать в реальном проекте. Как минимум высокая стоимость написания и поддержки теста по сравнению с NUnit каким-нибудь. Можете привести пример, где именно без SpecFlow не обойтись?
Еще в Канаде недавно какой-то закон приняли (не буду врать, не помню, в чем там именно дело), и теперь куча компаний из-за того, что email может попасть канадским партнерам, обулись добавлять во все письма такие вот подвалы.
>> public int GetTheTenthElement(IEnumerable collection)
>> public int GetTheTenthElement(IReadOnlyList collection)
я завидую, с какой легкостью ужесточается интерфейс метода
>> Вместо того, чтобы использовать системный ГСЧ, в Doom есть фиксированная таблица с 256 случайными числами, откуда извлекаются значения в соответствии с игровой логикой.
Интересно, как логика выбирала значение из таблицы. Тоже должна была делать это как-то случайно.
5*2 — 3*2 = 4
Это спор о терминах. Автор предлагает один код вместо другого, но их поведение не эквивалентно.
>>Да и при рефакторинге менять поведение — также допустимо, просто изучать и переписывать в таком случае надо больше кода.
Как бы то ни было автор предлагает именно этот кусок кода. Мы можем предположить, что он изолирован от всего остального.
и
Так все таки разрешается передавать нулевой customer в метод или нет? Два этих участка кода не эквивалентны — рефакторинг не удался.
Если processor == null, то нужно вернуть 0. Если бы DoProcess был бы открытым, то мы вынуждены были бы оставить это поведение при рефакторинге. Соответственно, оставили бы как одну из допустимых веток кода.
Если DoProcess не был бы приватным, то все равно пришлось бы писать проверку на null.
int i = Person.Age;
Хотя выше писали обратное — такие тесты смотрят.
Оборачивание 5ти вызовов API в человекочитаемый вид имеет не только плюсы, но и минусы. Например, любые изменения в API нужно будет руками править в тестах. Как часто человек, не знающий языка программирования заглядывает в тесты проекта? Стоит ли ради этого отказываться от нормальной поддержи тестов?
>> public int GetTheTenthElement(IReadOnlyList collection)
я завидую, с какой легкостью ужесточается интерфейс метода
Интересно, как логика выбирала значение из таблицы. Тоже должна была делать это как-то случайно.