代码之家  ›  专栏  ›  技术社区  ›  stratwine

我能写一个没有断言的测试吗?

  •  12
  • stratwine  · 技术社区  · 15 年前

    我想知道编写一个没有任何“断言”的测试是否“可以”。因此,只有在发生异常/错误时,测试才会失败。

    就像一个测试,它有一个简单的选择查询,以确保数据库配置是正确的。所以当我更改一些DB配置时,我重新运行这个测试并检查配置是否正确。?

    谢谢!

    6 回复  |  直到 8 年前
        1
  •  15
  •   Community CDub    8 年前

    确保单元测试在不遇到异常的情况下运行是完全有效的。

    按照 Matt B 他的建议是,一定要把测试的内容记录下来,使其清晰、准确。

        2
  •  4
  •   Péter Török    15 年前

    正如@kyle所指出的,您的测试用例是有效的。事实上,相反的情况也是有效的:当您编写一个测试用例来确认具有特定参数的某个调用会导致异常。

        3
  •  3
  •   Mattias Nilsson    15 年前

    当然可以。 在预期结果是一个可执行的地方,编写一个没有断言的测试也是非常好的。我知道testng允许您指定一个应该抛出的异常,如果不抛出预期的异常,测试将失败。

        4
  •  2
  •   JoshReedSchramm    15 年前

    测试是一个非常主观的讨论。有些人会说不,你应该总是有AAA语法。就我个人而言,我写的测试和你所说的非常相似,所以我会说,当然可以继续——如果它能帮助你构建一个更稳定的应用程序,那为什么不呢?

    例如,在nunit中,我认为[expectedException typeof(XXXX)]在逻辑上等同于断言。

    同样,在一些测试中,您可能不会断言任何东西,而是期望通过模拟和期望得到特定的执行顺序。

        5
  •  0
  •   Gorkem Pacaci    15 年前

    编写一个没有任何断言的单元测试是可以接受的。你可以这样做:

    • 测试无例外结束的案例。在这种情况下,如果可以的话,最好使用特定类型的异常来进行测试,如[ExpectedException(MyException)]。

    • 测试功能就在那里。即使测试不可能生成异常,如果有人决定删除该功能,您可能希望使此测试失败。如果测试使用了一个方法,并且删除了该方法,那么测试将无法构建。

        6
  •  0
  •   Rodislav Moldovan    8 年前

    测试的目的是检查“x”是否具有“预期的东西”,以便检查“预期的东西”是否正确断言、预期或验证。这就是为什么大多数框架以某种方式实现这些方法的原因。