Как выполнить модульное тестирование случая по умолчанию оператора switch на основе enum - PullRequest
21 голосов
/ 01 декабря 2009

У меня есть инструкция 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 или использовать его только для модульного тестирования?

Ответы [ 3 ]

27 голосов
/ 01 декабря 2009

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

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

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

10 голосов
/ 01 декабря 2009

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

(EnumType)(-1)
3 голосов
/ 01 декабря 2009

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

Create((EnumType)200);
...