Мне нужно написать модульный тест для следующей функции, и я увидел, что я могу использовать [ExpectedException]ExpectedException Утверждай
это функция, которая будет проверена.
public static T FailIfEnumIsNotDefined<T>(this T enumValue, string message = null)
where T:struct
{
var enumType = typeof (T);
if (!enumType.IsEnum)
{
throw new ArgumentOutOfRangeException(string.Format("Type {0} is not an Enum, therefore it cannot be checked if it is Defined not have defined.", enumType.FullName));
}
else if (!Enum.IsDefined(enumType, enumValue))
{
throw new ArgumentOutOfRangeException(string.Format("{1} Value {0} is not does not have defined value in Enum of type {0}. It should not be...", enumType.FullName, message ?? ""));
}
return enumValue;
}
и здесь будет идти код для проверки исключений, которые должны быть кинул
[TestMethod]
[ExpectedException(ArgumentOutOfRangeException(ArgumentException), "message")]
public void FailIfEnumIsNotDefined_Check_That_The_Value_Is_Not_Enum()
{
// PREPARE
// EXECUTE
// ASSERT
}
Я не имею понятия должны сделать Assert для исключения либо.
Используйте 'Assert.Throws()' вместо 'ExpectedException', так как этот атрибут делает тест пройденным, если exc eption произошло в любой части кода метода тестирования. «Assert.Throws» позволяет проверить точное место кода, в котором происходит исключение. – sthotakura
@sthotakura MSTest не имеет Assert.Throws, если вы не пишете пользовательский, который в любом случае является предпочтительной обработкой исключений MSTest. Подобно NUnit :) В моем ответе есть ссылка – Spock
@Spock Я этого не знал, спасибо! – sthotakura