代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm Alex Wayne

我能否确保所有测试在测试/单元中都包含断言?

  •  2
  • Andrew Grimm Alex Wayne  · 技术社区  · 16 年前

    对于test/unit和minitest,是否有可能使任何不包含断言的测试失败,或者是否需要进行monkey修补(例如,检查每个测试执行后断言计数是否增加)?

    出身背景 例如我不应该写信 unit tests without assertions -至少,我应该使用 assert_nothing_raised 如果我正在进行烟雾测试,表明我正在进行烟雾测试。

    3 回复  |  直到 9 年前
        1
  •  1
  •   Andrei Petrenko    13 年前

    为了确保单元测试能够真正验证任何东西,一种称为 Mutation testing 使用。

    对于Ruby,您可以查看 Mutant .

        2
  •  0
  •   Péter Török    16 年前

    正如PK的链接所指出的,断言本身的存在并不意味着单元测试是有意义和正确的。我相信仔细思考和意识是无法自动替代的。

    确保测试首先失败是一种良好的做法,应该养成习惯。

    除了您提到的内容之外,我经常在新测试的断言中设置错误的值,以检查测试是否确实运行并失败。(当然,我会修正它:-)这比编辑产品代码要简单。

        3
  •  0
  •   averell    16 年前

    目标是编写有用的测试 .

    缺少的断言只是表明测试 也许 这是没有用的。有趣的问题是: 如果有东西坏了,测试会失败吗?

    如果您测试的只是代码没有崩溃,那么 assert_nothing_raised 围绕它的只是一种评论。但测试“无爆炸”可能表明测试本身很弱。在大多数情况下,它不会给您任何关于代码的有用信息(因为“no crash!=correct”),那么您为什么要首先编写测试呢?另外,我更喜欢正确分解的方法,而不是只返回错误结果的方法。

    我发现最好的回归测试来自这个领域:敲打你的应用程序(或者让你的测试人员来做),然后为你发现的每个问题编写一个失败的测试。修复它,并通过测试。

    否则我会测试行为,而不是没有崩溃。在我有“空”测试的情况下(意味着我还没有编写测试代码),我通常会在里面放一个“不及格”来提醒我。