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