Мне пришлось написать единичный тест для существующего метода, который отображает перечисление на другое перечисление. Этот модульный тест касается сценария, когда сопоставление не определено в методе, и мы получаем исключение в блоке по умолчанию оператора switch.Ожидаемое ограничение атрибута исключения в Visual Studio Unit Test
enum players{sachin, ponting, mculum, gayle}
enum teams{westindies, australia, india, newzealand, southafrica}
public teams MappingMethod(players p)
{
switch(p)
{
case sachin: return india;
case gayle: return westindies;
......
default: throw new ArgumentOutOfRangeException();
}
}
Я попробовал модульный тест с атрибутом ExpectedException, и модульный тест работал нормально, когда у нас был вышеупомянутый сценарий. Но это не удается, когда отображение существует для всех элементов в перечислении.
Чтобы исправить это, я использовал блок try..catch внутри модульного теста и использовал Assert.IsInstanceOfType для проверки исключения вместо использования атрибута ExpectedException.
Есть ли другой лучший способ проведения тестирования этого устройства?
Возможно, переосмыслить то, что вы на самом деле пытаетесь проверить в своем модульном тесте? Если вы используете «ExpectedException», это буквально означает, что вы ожидаете, что тест выдаст исключение. Если он иногда бросает, а иногда нет, то это не «ожидается». Например, в своем модульном тесте вызовите MappingMethod с тем, что, как вы знаете, будет бросать. – MariusUt
Его единичный тест, который должен получить отказ, когда разработчик добавляет элемент в перечисление и забывает или пропускает обновление MappingMethod. Поскольку это невозможно всегда, какой подход вы предлагаете, кроме try..catch –