NUnit 3.7.1:使用InnerException

时间:2017-08-14 19:09:07

标签: c# nunit

我有一个OneTimeSetup,我想在运行测试(数据库,REST端点等)之前验证集成连接,如果出现问题,请将套件短路。考虑像

这样的东西
Try
    Dim testContext As DBContext = New DBContext(_configuredConnectionString)

    VerifySQLConnection(testContext)
Catch ex As Exception
    Dim actionableError As String = String.Format(_VERIFY_SQL_CONNECTION_TEMPLATE, _configuredConnectionString)
    Dim actionableException As New ConfigurationException(actionableError, ex)
    'Throw actionableException

    Assert.Inconclusive(actionableError)
End Try

如果连接失败,我不想让测试失败,我想断言整个套件是不确定的,因为实际测试从未运行过。

我注意到Assert.Inconclusive缺少内部异常的重载。这迫使我要么失败所有测试,要么检查完全内部异常,要么将测试标记为不确定,但是从NUnit测试运行器窗口中丢失可操作的信息。

  • 是否存在这样的原因,或者这种过载是否会导致疏忽?
  • 我是否可以使用另一种方法来获取Inconclusive 完整的内部异常(不只是消息,而是堆栈等)?

1 个答案:

答案 0 :(得分:2)

NUnit的Inconclusive结果旨在表示由于某些先决条件未得到满足而无法运行测试。异常发生的事实是内部实现的一部分 - 它是我们如何强制测试在此时停止运行 - 但是没有任何关于异常的性质暴露给用户。

Assert.Inconclusive是提供此类不确定结果的手动方式。它绝对没有进行任何特定的测试,与Assert.Fail的工作方式类似。如果你想进行某种测试,那就是"假设"您将使用Assume.That方法生成结果。

在您的情况下,VerifySqlConnection方法听起来像是您应该在至少一种测试方法中测试的方法,如果您无法做到,则会失败。对于依赖于已建立连接的其他测试,您可以使用类似于......的代码。

Assume.That(() => VerifySqlConnection(testContext), Throws.Nothing);

以上是C#语法...我将VB翻译留给您。 : - )