我发现,这些似乎是测试异常的主要有两种方式:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
其中,这些将是最好的? 难道一个提供比其他优势? 还是纯粹个人喜好的问题?
我发现,这些似乎是测试异常的主要有两种方式:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
其中,这些将是最好的? 难道一个提供比其他优势? 还是纯粹个人喜好的问题?
第一个允许您测试多个异常,多次调用:
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
第二只允许您测试每个测试功能的一个例外。
主要的区别是:
ExpectedException()
属性使得如果在测试方法中的任何地方出现异常,测试通过。
的使用Assert.Throws()
允许指定exact
地方例外,预计该代码的地方。
NUnit的3.0下降为官方支持ExpectedException
干脆。
所以,我肯定更喜欢使用Assert.Throws()
方法,而不是ExpectedException()
属性。
我喜欢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");
}
您可能还强类型你希望(如老版本ATTRIB)的错误。
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
如果你正在使用的旧版本(<= 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