单元测试应该使用日志吗?

时间:2011-05-12 08:17:29

标签: java unit-testing logging

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

  1. 某些答案(例如this one)表明单元测试不应记录任何内容。
  2. 一些问题和答案(例如this one)提出了单元测试中使用的不同日志记录技术和格式。
  3. 单元测试应记录他们的工作吗?这些额外的信息是否有助于单元测试报告?或者单元测试是否应该保持沉默,只要它们没有失败?

    我的问题以Java单元测试为目标,但其他语言的程序员输入也很有趣。

6 个答案:

答案 0 :(得分:7)

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

我认为你误解了第一个链接的帖子;海报并没有声称你不应该记录任何东西,他说通过/失败不应该只是在日志中。它应该返回到测试框架。它应该是一段与普通日志完全分开的数据。

我同意他的意见。

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

答案 1 :(得分:4)

我在单元测试中使用了安静和详细的日志记录,而且我个人更喜欢在每个测试输出带有测试名称的单行以及它如何进行时。当我能说出发生的事情时,我发现它更具吸引力,但我不能说它对我的工作有任何实际影响。

如果从控制台运行,我认为彩色输出是一个优点。

答案 2 :(得分:3)

单元测试确实应该如此简单和专注,测试失败已经记录了出错的地方。您不需要阅读测试用例的日志来查找它。

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

答案 3 :(得分:1)

通常,当你编写测试时,你学到的第一件事就是单元测试不应该连接到任何东西 - 数据库,文件系统,互联网。无论您使用何种环境,单元测试应该非常快速且工作。如果它连接到某个东西,它就是集成测试。 我认为使用可能会显着降低单元测试速度的日志框架违背了单元测试的理念。整个想法是,你可以在每一个心血来潮的情况下进行成千上万次测试。理想的情况是将你的单元测试套件插入你的保存按钮(不太合理,但你得到我的漂移)。

答案 4 :(得分:0)

如果日志框架不允许您启用/禁用日志,则该框架非常无用。因此,随意添加日志,只需确保您可以单独启用/禁用它们

答案 5 :(得分:0)

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