Подтвердить что ты не робот

Как unit test случай по умолчанию для оператора switch, основанного на перечислении

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

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);
   }
}

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

4b9b3361

Ответ 1

Попробуйте выполнить

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

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

Ответ 2

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

(EnumType)(-1)

Ответ 3

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

Create((EnumType)200);