Я столкнулся со сценарием, к которому я не слишком уверен, как к нему приблизиться.
Мы пытаемся увеличить охват кода наших модульных тестов до 100%.
I 'мы пытались использовать подход TDD к разработке, написанию тестов, прохождению теста, написанию провального теста, добавлению еще кода для его прохождения и т. д.
При этом я обнаружил, что написал класс, подобныйэто:
public enum IntervalType : int
{
Shift = 1,
PaidBreak = 2,
UnpaidBreak = 3
}
public static class QuarterFactory
{
public static IQuarter CreateQuarter(IntervalType intervalType)
{
switch (intervalType)
{
case IntervalType.Shift:
return new ShiftQuarter();
default:
throw new ArgumentException(String.Format("Unable to create a Quarter based on an IntervalType of: {0}", intervalType));
}
}
}
По мере кодирования фабрика расширилась до следующего:
public static class QuarterFactory
{
public static IQuarter CreateQuarter(IntervalType intervalType)
{
switch (intervalType)
{
case IntervalType.Shift:
return new ShiftQuarter();
case IntervalType.PaidBreak:
return new PaidBreakQuarter();
case IntervalType.UnpaidBreak:
return new UnpaidBreakQuarter();
default:
throw new ArgumentException(String.Format("Unable to create a Quarter based on an IntervalType of: {0}", intervalType));
}
}
}
Первый вопрос, который я задаю:
Теперь, когдаФабрика выполняет перечисление, удалить ли исключение по умолчанию для покрытия кода или оставить исключение там по умолчанию, если кто-то добавляет новый тип в перечисление и забывает изменить фабрику?
Второй вопрос, который я задаю:
Если я решил удалить исключение и установить тип по умолчанию UnpaidBreakQuarter - имеет ли смысл по умолчаниюIQuarter возвращается в UnpaidBreakQuarter илиЭто подняло бы вопрос: «Почему по умолчанию UnpaidBreakQuarter, есть ли бизнес-правило для этого?».
С уважением,
Джеймс