我发现这些似乎是测试例外的两种主要方式:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
哪一种最好?有人提供优势吗?或者仅仅是个人偏好的问题?
答案 0 :(得分:247)
主要区别在于:
如果在测试方法的任何位置发生异常, ExpectedException()
属性会通过测试。
Assert.Throws()
的使用允许指定代码的exact
位置。
NUnit 3.0完全取消对ExpectedException
的官方支持。
所以,我绝对更喜欢使用Assert.Throws()
方法而不是ExpectedException()
属性。
答案 1 :(得分:84)
第一个允许您通过多次调用来测试多个异常:
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
第二种只允许您测试每个测试函数的一个异常。
答案 2 :(得分:35)
我更喜欢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");
}
答案 3 :(得分:10)
你也可以强力输入你期望的错误(比如旧的attrib版本)。
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
答案 4 :(得分:0)
如果您使用<div class="row">
<div class= "col-md-6">
<div class="thumbnail">
<a target="_blank" href="http://codepen.io/gusd773/pen/YZExVE">
<img src="http://jumpoff.tv/assets/images/made/assets/images/posts/ready_to_die2_326_202_s_c1_center_top.jpg"></a>
</div>
</div>
<div class= "col-md-6">
<div class="thumbnail">
<a target="_blank" href="http://codepen.io/gusd773/pen/YZExVE">
<img src="http://jumpoff.tv/assets/images/made/assets/images/posts/ready_to_die2_326_202_s_c1_center_top.jpg"></a>
</div>
</div>
</div>
</div>
的旧版本(&lt; = 2.0 ),则需要使用NUnit
。
如果您使用 2.5 或更高版本,则可以使用ExpectedException
https://github.com/nunit/docs/wiki/Breaking-Changes
使用方法: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5