Как выполнить модульное тестирование случая по умолчанию для оператора переключения на основе перечисления

У меня есть оператор switch на фабрике, который возвращает команду на основе значения переданного перечисления. Что-то вроде:

public ICommand Create(EnumType enumType)
{
   switch (enumType)
   {
      case(enumType.Val1):
         return new SomeCommand();
      case(enumType.Val2):
         return new SomeCommand();
      case(enumType.Val3):
         return new SomeCommand();
      default:
         throw new ArgumentOutOfRangeException("Unknown enumType" + enumType);
   }
}

В настоящее время у меня есть случай переключения для каждого значения в перечислении. У меня есть модульные тесты для каждого из этих случаев. Как я могу проверить, что случай по умолчанию вызывает ошибку? Очевидно, что в настоящий момент я не могу передать неизвестный EnumType, но кто сказал, что это не изменится в будущем. Есть ли способ расширить или издеваться над EnumType исключительно ради модульного теста?


person James Hay    schedule 01.12.2009    source источник


Ответы (3)


Попробуйте следующее

Assert.IsFalse(Enum.IsDefined(typeof(EnumType), Int32.MaxValue);
Create((EnumType)Int32.MaxValue);

Верно, что любое значение, которое вы выберете для случая «по умолчанию», однажды может стать допустимым значением. Поэтому просто добавьте тест, чтобы убедиться, что он не находится в том же месте, где вы проверяете значение по умолчанию.

person JaredPar    schedule 01.12.2009

Вы можете привести неверное значение к вашему типу перечисления - это не проверяет. Итак, если Val1 - Val3, например, от 1 до 3, передайте:

(EnumType)(-1)
person David M    schedule 01.12.2009

Вы можете привести базовый тип перечисления к типу перечисления, чтобы создать «недопустимое» значение.

Create((EnumType)200);
person bdukes    schedule 01.12.2009