c# – 具有多个异常的UnitTest ExpectedException

前端之家收集整理的这篇文章主要介绍了c# – 具有多个异常的UnitTest ExpectedException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一个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:

[TestMethod,"...")]
public void StringToIntException()
{
    sAbc.ToInteger();
}

[TestMethod,"...")]
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 = "," });
        });
    }

解决方法

问题问题已经过去了7年,所以Assert.ThrowsException可以在Visual Studio 2017的Microsoft.VisualStudio.TestTools.UnitTesting中找到.
Assert.ThrowsException<exception type goes here>(() =>
{
    code that throw exception here
});

Assert.ThrowsException看起来不像Visual Studio 2015中存在.练习留给读者验证.

猜你在找的C#相关文章