我想要一个TestMethod用于多个异常。问题是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编辑:
今天这将基于Jan David Narkiewicz的建议。但正如我已经提到的那样。从我今天的观点来看,这对于测试来说是一个糟糕的设计。例如:
[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 = "," });
});
}
答案 0 :(得分:0)
据我所知,使用Attributes是不可能的,因为当抛出异常时,方法的执行会被中断。因此,如果第一行有异常,则不会执行第二行。
如果您确实需要此功能,请使用具有以下内容的nUnit:
Assert.Throws<Exception>(delegate { /*Your code*/ });