NUnit:测试没有预期的异常

问题描述:

我想创建NUnit测试以确保我的函数不会抛出异常。是否有一些具体的方式来做到这一点,或者我应该只写NUnit:测试没有预期的异常

[Test] 
public void noExceptionTest() { 
    testedFunction(); 
} 

如果没有引发异常,它会成功吗?

+2

这真的是你想测试的吗?你确实意识到,如果testedFunction是无操作的,它将通过测试。 – Martijn 2012-03-21 11:38:53

+0

你的方法是否有特别的要求不扔?或者它是否以我的代码作品的精神完成,因为它不会抛出*?如果后面的那个,你migth要检查[那些](http://*.com/questions/8788558/should-i-test-that-methods-dont-throw-exceptions)[two](http:// *.com/questions/9417213/c-how-do-i-check-no-exception-occurred-in-my-unit-test)为什么一般你不这样做。你从这样的测试中获得的东西很少。 – 2012-03-21 13:36:31

+1

@jimmy_keen作为一个例外情况,已经用于测试调用Dispose()第二次不会抛出 – Gareth 2014-11-12 13:59:38

Assert.DoesNotThrow(() => { /* custom code block here*/}); 

或只是方法

Assert.DoesNotThrow(() => CallMymethod()); 

欲了解更多详情,请参阅NUnit Exception Asserts

是的,没有抛出异常 - >测试通过。如果没有重新抛出try-catch块,它也会通过。

你是正确的。如果有例外,测试将失败。

除非指定

[ExpectedException(typeof(YourException)) ] 
public void TestMethod() 
{ 
    ... 
} 

或者像@sll说,您使用更具体的

Assert.DoesNotThrow 

assertion

不引发异常是正常的行为。您的测试将成功验证不会抛出异常。

我觉得有一个单元测试逻辑相关的问题。 如果您希望在特定输入下发生特定异常,则将其声明为预期的异常。如果您只是检查您的函数是否正常工作,并且在此正确行为期间不会出现异常,则只需编写该函数,如果它引发任何异常,则测试将失败。

另一方面,您的代码似乎正常工作,只有检查没有例外可能不是单元测试的正确方法。在单元测试中,通常你会期望一些输出(预期值),你有一些实际的输出(实际值),你断言预期值和实际值是相同的。

使用NUnit 3.0 Constraint Model类型断言中代码将如下所示:

Assert.That(() => SomeMethod(actual), Throws.Nothing);

此示例来自NUnit wiki服用。