Closed SergeyUsok closed 9 years ago
Пишу сюда же, чтобы не заводить отдельный тикет.
public static LogEntryReader CreateLogEntryReader(string content = null, ILogEntryParser parser = null)
{
parser = parser ?? new SimpleLogEntryParser();
content = content ?? string.Empty;
return LogEntryReaderTestFactory.Create(content, parser);
}
Т.е. из примера не видно каких-то плюсов использования билдера. Я не знаю, можно ли что-то такое сделать именно с этим кодом. Билдер реально нужен, когда количество возможных состояний объекта условно бесконечно, и мы не можем все эти состояния представить в виде набора конструкторов (тот же FluentAssertions например). Или когда нужно изменить некое поведение объекта, например, чтобы сеттер вместо того, чтобы писать в объект, писал в переданную ему переменную, а геттер соответственно из этой переменной читал.
4.
Этот же подход позволяет спрятать в класс Fixture инициализацию моков, и выставить объект Mock<IDependency в качестве свойства.
Что такое IDependency? В главе оно вообще отсутствует.
Ответ @SergeyUsok:
) Судя по коду строителя, ты позволяешь создать LogEntryReader с null аргументами, это нормально?
В книге обычно не приводится валидация аргументов. Ее практически нигде нет. Если она где-то есть, то ее нужно просто убрать.
2) Откуда LogEntryReaderTestFactory?
Переделаю.
3) Для меня странно название свойства Cut - это по паттерну так?
Это сокращение для Class Under Test. Переделаю.
4) Ты писал о преимуществе тестовой фабрики перед использованием конструкторов в цене изменений в тестах в случае, если появится например еще один аргумент конструктора. Но в случае использования билдера эта цена снова может возрасти, так как придется менять опять все тесты. То есть я хочу сказать, что где-то в тексте возможно стоит сказать об этом случае и показать, что в билдере можно просто сделать третий аргумент с дефалтовым значением и таким образом показать, что это не одно и то же, что и использование конструкторов.
Билдер в любом случае является прослойкой между создаваемым классом и клиентом. Это значит, что при изменении конструктора создаваемого класса поменяется билдер (что нормально) и, благодаря билдеру, поменяются лишь те тесты, которые были завязаны на уделнный параметр. Если же параметр добавляется в тестируемый класс, то билдер будет использовать параметры по умолчанию для этого аргумента, что позволит изменить лишь билдер, но не трогать все тесты.
Я не знаю, нужно ли на этом акцентировать внимание. Но, раз вопрос возник, то, скорее всего, нужно.
@AlexanderSher
Ребят, гляньте на новый вариант плз.
Пока закрываю тикет. Открывайте новый или переоткрывайте этот в случае вопросов.
случаях - случае. Мне кажется первый вариант можно заменить на "при определенных сценариях"
ОН будет выглядеть
угловую скобку не закрыл
наверное, "читабельными", поскольку, "читаемый" - это тот, который часто или много читают
после "случаях" запятая
то же, что и выше - читабельность
Несколько вопросов по паттерну и коду: 1) Судя по коду строителя, ты позволяешь создать LogEntryReader с null аргументами, это нормально? 2) Откуда LogEntryReaderTestFactory? 3) Для меня странно название свойства Cut - это по паттерну так? 4) Ты писал о преимуществе тестовой фабрики перед использованием конструкторов в цене изменений в тестах в случае, если появится например еще один аргумент конструктора. Но в случае использования билдера эта цена снова может возрасти, так как придется менять опять все тесты. То есть я хочу сказать, что где-то в тексте возможно стоит сказать об этом случае и показать, что в билдере можно просто сделать третий аргумент с дефалтовым значением и таким образом показать, что это не одно и то же, что и использование конструкторов.