【问题标题】:How to enforce JUnit assert messages?如何强制执行 JUnit 断言消息?
【发布时间】:2014-06-27 20:34:18
【问题描述】:

所有 JUnit 断言方法都有一个可选的第一个参数,即断言失败时打印的消息。

如何确保始终传递参数,并且我的项目中的开发人员从不懒惰地跳过描述断言在做什么?

是否有可以检查的检查工具? 有什么我可以通过编程方式做的吗?

我的项目是 maven 友好的。

【问题讨论】:

  • 您可以将 JUnit Assert 包装在您自己的类中,隐藏无消息方法,并强制您的开发人员导入您的断言库。
  • 不要这样做,即使有办法。在大多数情况下,您只需要 junit 的本机消息:“预期为 6,但为 3”,并带有堆栈跟踪显示哪里出错了。更重要的是为您的测试选择好的名称。
  • @CarlManaster 大多数情况下,但assertTrueassertFalse 确实受益于用户提供的一些有意义的消息。
  • @DavidConrad 使用 assertThat 和 hamcrest 匹配器提供更多信息的默认错误消息
  • @dkatzel 问题仍然存在,如何检查所有代码以确保项目中的所有开发人员都使用 assertThat 和 hamcrest 匹配器而不是 assertTrueassertFalse没有String message 参数。

标签: java testing junit policy code-inspection


【解决方案1】:

由于代码检查似乎是您的目标,我会推荐一个名为 PMD 的工具。如果还没有这方面的规则,我认为创建一个规则是相当微不足道的。此外,这将帮助您检测开发人员可能正在创建的其他代码混乱。

这是一个链接: http://pmd.sourceforge.net/

【讨论】:

    【解决方案2】:

    在我们的团队中,我们会对拉取请求进行代码审查。如果断言不符合标准,您可以在评论中对其进行标记。只有获得足够批准的拉取请求才能被合并。

    也就是说,我可能不会在我的团队中执行此规则。相反,我会告诉他们编写更短的测试,其中方法名称将清楚地说明意图,例如:

    @Test(expected = IllegalArgumentException.class);
    shouldThrowExceptionWhenInputIsNegative() {}
    
    @Test
    shouldFilterOutNulls() {}
    
    @Test
    shouldCreateAdditionalRecordWhenBankBalanceIsOver10000() {}
    

    等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2011-01-29
      • 2011-10-24
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      相关资源
      最近更新 更多