Я хочу один TestMethod для нескольких исключений.Проблема заключается в том, что метод тестирования останавливается после первого выданного исключения.
Я знаю, что могу сделать что-то подобное:
try
{
sAbc.ToInteger();
Assert.Fail(); // If it gets to this line, no exception was thrown
}
catch (ArgumentException) { }
Но я хочу использовать следующую базу кода:
[TestMethod, ExpectedException(typeof(ArgumentException), "...")]
public void StringToIntException()
{
sAbc.ToInteger(); // throws an exception and stops here
sDecimal.ToInteger(); // throws theoretically a exception too...
}
И я не хочу создавать один метод испытаний для каждого возможного исключения, например:
[TestMethod, ExpectedException(typeof(ArgumentException), "...")]
public void StringToIntException()
{
sAbc.ToInteger();
}
[TestMethod, ExpectedException(typeof(ArgumentException), "...")]
public void StringToIntException()
{
sDecimal.ToInteger();
}
Редактировать с 2018-11-09:
Сегодня это будет работать на основе предложения Яна Давида Наркевича.Но, как я уже упоминал.С моей точки зрения, сегодня это плохой дизайн для теста.Пример:
[TestMethod]
public void ExceptionTest()
{
Assert.ThrowsException <FormatException> (() =>
{
int.Parse("abc");
});
Assert.AreEqual(0.1m, decimal.Parse("0.1", CultureInfo.InvariantCulture));
Assert.ThrowsException<FormatException>(() =>
{
decimal.Parse("0.1", new NumberFormatInfo { NumberDecimalSeparator = "," });
});
}