使用NUnit Assert.Throws方法或属性的ExpectedException?(Use

2019-07-20 08:07发布

我发现,这些似乎是测试异常的主要有两种方式:

Assert.Throws<Exception>(()=>MethodThatThrows());

[ExpectedException(typeof(Exception))]

其中,这些将是最好的? 难道一个提供比其他优势? 还是纯粹个人喜好的问题?

Answer 1:

第一个允许您测试多个异常,多次调用:

Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());

第二只允许您测试每个测试功能的一个例外。



Answer 2:

主要的区别是:

ExpectedException()属性使得如果在测试方法中的任何地方出现异常,测试通过。
的使用Assert.Throws()允许指定exact地方例外,预计该代码的地方。

NUnit的3.0下降为官方支持ExpectedException干脆。

所以,我肯定更喜欢使用Assert.Throws()方法,而不是ExpectedException()属性。



Answer 3:

我喜欢assert.throws,因为它可以让我验证并引发异常后断言的其他条件。

    [Test]
    [Category("Slow")]
    public void IsValidLogFileName_nullFileName_ThrowsExcpetion()
    {
        // the exception we expect thrown from the IsValidFileName method
        var ex = Assert.Throws<ArgumentNullException>(() => a.IsValidLogFileName(""));

        // now we can test the exception itself
        Assert.That(ex.Message == "Blah");

    }


Answer 4:

您可能还强类型你希望(如老版本ATTRIB)的错误。

Assert.Throws<System.InvalidOperationException>(() => breakingAction())


Answer 5:

如果你正在使用的旧版本(<= 2.0), NUnit ,那么你需要使用ExpectedException

如果使用的是2.5或更高版本,那么你可以使用Assert.Throw()

https://github.com/nunit/docs/wiki/Breaking-Changes

使用方法: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5



文章来源: Use NUnit Assert.Throws method or ExpectedException attribute?