使用NUnit Assert.Sthrows方法或ExpectedException属性



我发现这似乎是测试异常的两种主要方法:

Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]

以下哪一个最好?一个比另一个更有优势吗?还是仅仅是个人喜好的问题?

主要区别在于:

如果测试方法中的任何位置发生异常,则ExpectedException()属性使测试通过
Assert.Throws()的使用允许指定代码的exact位置,该位置应为异常。

NUnit 3.0完全放弃了对ExpectedException的官方支持。

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

第一个允许您通过多个调用测试多个异常:

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

第二种方法只允许每个测试函数测试一个异常。

我更喜欢assert.throws,因为它允许我在抛出异常后验证和断言其他条件。

    [Test]
    [Category("Slow")]
    public void IsValidLogFileName_nullFileName_ThrowsExcpetion()
    {
        var a = new MyTestObject();
        // 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");
    }

您也可以强键入您期望的错误(就像旧的attrib版本一样)。

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

如果您使用的是NUnit的旧版本(<=2.0),则需要使用ExpectedException

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

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

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

相关内容

  • 没有找到相关文章

最新更新