【问题标题】:Should unit tests use logging?单元测试应该使用日志吗?
【发布时间】:2011-05-12 08:17:28
【问题描述】:

这个话题似乎有两种趋势:

  1. 一些答案​​(例如this one)建议单元测试不应记录任何内容。
  2. 一些问题和答案(例如 this one)建议在单元测试中使用不同的日志记录技术和格式。

单元测试应该记录它们的工作吗?这些附加信息对单元测试报告有帮助吗?或者单元测试只要不失败就应该保持沉默?

我的问题针对的是 Java 单元测试,但其他语言的程序员的输入也可能很有趣。

【问题讨论】:

    标签: java unit-testing logging


    【解决方案1】:

    这显然有点主观,但我不明白您为什么要在单元测试中禁用日志记录。

    我确实认为您误解了第一个链接帖子;发帖人并没有声称你不应该记录任何东西,他是说通过/失败不应该只是日志中的东西。它应该返回到测试框架。应该是完全独立于普通日志的数据。

    我同意他的观点。

    除此之外,您仍然可以进行正常的日志记录。无论如何,您在您正在测试(或应该拥有)的课程中都有它。当测试失败时,您可能会在日志中看到一些内容,这将帮助您更快地调试它。我不明白这怎么可能是负面的。

    【讨论】:

    • 另外,不要忘记断言中的 cmets。例如,如果您使用 Junit,则 assertEquals(a,b) 比 assertEquals("Values a and b were wrong, bla bla", a ,b) 更糟糕。当测试失败时,这会为测试框架报告/日志增加更多价值
    【解决方案2】:

    我在单元测试期间使用了安静和详细的日志记录,我个人更喜欢在每个测试输出一行包含测试名称及其运行方式时使用它。当我知道发生了什么时,我觉得它更有吸引力,尽管我不能说它对我的工作有任何真正的影响。

    如果你从控制台运行,我认为彩色输出是一个加分项。

    【讨论】:

    • 完全可以将结果记录到一个流中,而将通常的日志项记录到另一个流中。
    • 您为什么需要日志语句来告诉您测试名称以及它是如何进行的?测试框架(希望是您的 IDE)已经为您做到了。
    • @MichelJung:我喜欢 CI 和 cli,而不仅仅是 IDE。我从 Java 中看到的大部分内容都是以一种只会乱扔日志的方式重载输出,尤其是在集成测试中。它也是一种可以很好地翻译多种语言的风格,不管平台、IDE、CI、cli 等。谷歌的 C++ 单元测试模块就是一个很好的例子。
    【解决方案3】:

    单元测试真的应该如此简单和专注,以至于测试失败已经记录了问题所在。您无需通读测试用例的日志即可找出答案。

    但是最好记录一大套自动化测试的总结果,这样您就不必遍历所有测试找到那些失败的。很高兴在最后看到一个您可以关注的摘要。

    【讨论】:

      【解决方案4】:

      通常,当您编写测试时,您学到的第一件事就是单元测试不应该连接到任何东西——数据库、文件系统、互联网。无论您在什么环境中工作,单元测试都应该非常快速并且可以工作。如果它连接到某个东西,那么它就是一个集成测试。 我认为使用可能会显着降低单元测试速度的日志框架是违背单元测试理念的。整个想法是,您可以随心所欲地运行成千上万的测试。理想的做法是将您的单元测试套件插入您的保存按钮(这不太合理,但您明白我的意思)。

      【讨论】:

        【解决方案5】:

        我相信,单元测试中不应该有日志记录,而只有断言。主要原因是日志记录隐藏了重要信息,这些信息在日志中只有其作者可见。这是我的博客文章:Logging in Unit Tests, a Bad Practice

        【讨论】:

          【解决方案6】:

          如果日志框架不允许您启用/禁用日志,那么它就毫无用处。因此,请随意添加日志,只需确保您可以将它们与其他所有内容分开启用/禁用

          【讨论】:

            【解决方案7】:

            测试有断言。如果断言中缺少某些内容,请添加更多断言。日志用于事后调查错误。但是,当您进行单元测试时,您可以自动搜索错误。

            如果您想查看日志,这意味着您没有足够的测试用例和检查。添加它们。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-27
              • 2010-10-02
              • 2018-12-17
              • 2011-06-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多