测试没有预期的异常

我想创建 NUnit 测试来确保我的函数不会抛出异常。有什么具体的方法吗,还是我直接写

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

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

63471 次浏览

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

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

或者只是方法

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

有关详细信息,请参阅 异常断言

你是对的。如果有一个例外,那么测试将失败。

除非你指定

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

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

Assert.DoesNotThrow

断言。

不引发异常是正常的操作过程。测试将成功验证未引发异常。

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

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

使用 NUnit 3.0 约束模型类型断言,代码如下:

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

这个例子取自 NUnit 维基

如果希望坚持使用 Arrange-Act-Assert 模式,可以事先定义 TestCommittee 并在以后断言它。该函数仍然在 Assert 部分中执行,但是结构更加清晰。

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


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


// Assert
Assert.DoesNotThrow(transformAction);