测试没有预期的异常

时间:2012-03-21 11:35:28

标签: c# .net unit-testing testing nunit

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

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

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

7 个答案:

答案 0 :(得分:91)

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

或者只是方法

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

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

答案 1 :(得分:23)

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

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

此示例取自NUnit wiki

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

除非您指定

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

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

Assert.DoesNotThrow

assertion

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

如果你想坚持Arrange-Act-Assert模式,你可以先定义TestDelegate,然后再声明它。函数仍然在Assert部分执行,但结构更清晰。

// Arrange
var dataHandler = this.GetTestDataHandler();

// Act
TestDelegate transformAction = () => dataHandler.TransformData();

// Assert
Assert.DoesNotThrow(transformAction);