我正在使用 NUnit 进行单元测试(使用 TD.NET 运行)。
使用 Assert.DoesNotThrow 时,我得到了异常,但没有任何堆栈跟踪,这使得识别根本问题变得更加困难。
我该如何解决这个问题?
我正在使用 NUnit 进行单元测试(使用 TD.NET 运行)。
使用 Assert.DoesNotThrow 时,我得到了异常,但没有任何堆栈跟踪,这使得识别根本问题变得更加困难。
我该如何解决这个问题?
这Assert.DoesNotThrow
是多余的,如果测试抛出,测试将在没有断言的情况下自动失败。以我的拙见,为了澄清正在测试的内容,最好在测试方法名称中传达。语法中的文档优势很少Assert.DoesNotThrow
,正如您所指出的,这只会使修复失败的测试变得更加困难。
此外,如果您有一个包含多个断言的非常长的测试,那么Assert.DoesNotThrow
填充一个重要的角色是断言正确的代码块引发了异常。但是,在这种情况下,更合适的解决方案是查看是否可以缩短测试和/或将断言移到自己的测试中。
我怀疑它是否真的回答了你的问题,但我会将测试缩短为单一情况,这样你就不需要将一些代码包装到你传递给的委托中Assert.DoesNotThrow
。然后,只需编写没有任何断言的测试。抛出意外异常的测试会失败,所以它会做你想做的事,你会得到完整的异常。
我大约 10% 的测试是这样工作的;根本没有断言,方法名称如ThisOrThatShouldNeverThrow()
.
调试时的另一个选择是在调试器中运行测试(使用 TD.Net)并在 Debug|Exceptions 中选中一些额外的框,以便在抛出异常时调试器停止。