测试没有预期的异常

问题描述 投票:56回答:6

我想创建NUnit测试以确保我的函数不会抛出异常。是否有一些特定的方法来做,或者我应该写

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

如果没有抛出异常,它会成功吗?

c# .net unit-testing testing nunit
6个回答
93
投票
Assert.DoesNotThrow(() => { /* custom code block here*/});

或者只是方法

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

有关更多详细信息,请参阅NUnit Exception Asserts


23
投票

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

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

这个例子来自NUnit wiki


6
投票

不抛出异常是正常的行动方式。您的测试将成功验证是否未引发异常。


2
投票

你是对的。如果有异常则测试将失败。

除非你指明

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

或者正如@sll所说,你使用的更具体

Assert.DoesNotThrow

assertion


1
投票

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


1
投票

我认为存在与单元测试逻辑相关的问题。如果您期望某些输入下的特定异常,则将其声明为预期的异常。如果您只是检查您的函数是否正常运行并且在此正确行为期间没有预期异常,您只需编写它并且如果它抛出任何异常,则您的测试将失败。

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

© www.soinside.com 2019 - 2024. All rights reserved.