【问题标题】:Can I write a test without any assert in it?我可以编写一个没有任何断言的测试吗?
【发布时间】:2010-05-24 20:04:51
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • @Kyle Rozendo:JUnit 可以(并且通常)不仅仅用于单元测试。您在这个问题中添加了一些“单元测试”标签,但我真的不确定验证某些“db-configuration”的测试(OP 写了 所以当我更改一些 db-configuration 时,我重新运行这个测试并检查配置是否正确)实际上是一个单元测试。 OP 没有提到单元测试,我不会将这样的测试称为“单元测试”。
  • @Web - “单元测试是一种软件验证和确认方法,程序员可以在其中测试各个源代码单元是否适合使用。”我不同意:)
  • 这种测试有时被称为“烟雾测试”。如果冒烟,则测试失败。

标签: java unit-testing junit assert


【解决方案1】:

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

根据Matt B 的建议,请务必记录测试的实际测试内容,以便清晰准确。

【讨论】:

  • 请务必记录测试的实际测试内容以明确
  • 为了“确定”你必须断言“x”有“for-sure-->this-value-or-state-or-whatever”,没有断言的测试是有意义的:从0到无
【解决方案2】:

正如@Kyle 所说,您的测试用例是有效的。事实上,相反的情况也是有效的:当您编写测试用例以确认带有特定参数的某个调用会导致异常时。

【讨论】:

    【解决方案3】:

    当然可以。 在预期结果是异常的情况下编写没有断言的测试也是完全可以的。我知道 testng 会让你指定一个应该抛出的异常,如果没有抛出预期的异常,测试将失败。

    【讨论】:

      【解决方案4】:

      测试是一个非常主观的讨论。有些人会说不,您应该始终使用 AAA 语法。就我个人而言,我编写的测试与你所说的非常相似,所以我会说,一定要继续 - 如果它可以帮助你构建一个更稳定的应用程序,那为什么不呢。

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

      此外,在某些测试中,您可能不会断言任何内容,而是期望通过 Mocks 和 Expects 实现特定的执行顺序。

      【讨论】:

      • 谢谢!是的。我想起了一些没有断言但没有期望的 JMock 教程。将对此进行探索!
      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2021-08-17
          • 1970-01-01
          • 2021-09-18
          • 2023-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-03
          • 1970-01-01
          相关资源
          最近更新 更多