我想创建 NUnit 测试来确保我的函数不会抛出异常。有什么具体的方法吗,还是我直接写
[Test] public void noExceptionTest() { testedFunction(); }
如果没有抛出异常,它会成功吗?
是的,没有抛出异常-> 测试通过。如果存在没有重新抛出的 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);