【问题标题】:Checkstyle and PMD as advice onlyCheckstyle 和 PMD 仅作为建议
【发布时间】:2018-03-08 17:40:53
【问题描述】:

我将如何设置使用 pmd 和 checkstyle 结果仅作为建议并在构建服务器上禁用它们?这样做会是不好的做法吗?

pmd 和 checkstyle 都提供valuable advice,我想继续使用它们。

但是(这里是但是)我发现我的代码收集了很多试图解决一些警告的 lint。举几个例子:

  • 测试类包含许多 mockito 和 junit 静态导入,我总是必须添加 @SuppressWarnings("PMD.TooManyStaticImports")。

  • 被测类需要在其字段中填充模拟对象,这些不会在测试中的任何地方使用,但需要用@Mock 声明和注释,以使被测类正常工作。添加@SuppressWarnings("PMD.UnusedPrivateField")。

  • 在测试类中,我将拥有从一长串参数创建对象的方法,例如:createPerson(String firstname, String lastname, int shoesize, String favouritecolor, ...)。这些对象通常是从数据库或 XML 创建的。添加@SuppressWarnings("PMD.ParameterNumberCheck")。

  • 有时我的文档会是:“此方法确保 X 在以下 3 种情况下:\n ...”。显然这是不允许的,因为第一句应该以句号结尾。

  • 父类 X 有一些它的所有子类都需要和使用的字段 y,但 checkstyle won't allow it 除非通过方法 (getY()) 访问该字段。这是不自然的,IMO。

一种选择是永久关闭导致最讨厌的检查,但是检查可能是讨厌的或非常有用的,具体取决于上下文。 我认识到,在代码中明确禁止警告也是一种记录,仅在特定上下文中,检查是无关紧要且令人讨厌的。让我烦恼的是抑制的数量,几乎每个测试类都需要抑制,而其他一些类需要变通方法。

那么生成警告但不允许 checkstyle 和 pmd 违规导致构建失败的解决方案吗?

【问题讨论】:

    标签: java checkstyle pmd software-quality


    【解决方案1】:

    测试类包含 ...
    正在测试的类 ...
    在测试类中...

    在我看来,你应该在你的测试代码下禁止这些检查,因为你不同意它们。

    这种情况很常见,例如在 Checkstyle 中,我们不记录测试代码,但我们的主代码记录所有内容。 To get around this for PMD, we split our configuration between test and main. To get around this for Checkstyle utility, we suppress violations for the test directory. 您还可以查看 Checks 的选项,看看是否有任何方法可以将其配置为忽略您的情况。

    有时我的文档会是:“此方法确保 X 在以下 3 种情况下:\n ...”。

    我不能肯定,因为我不知道你的方法的内容,但第一句话应该是对方法的作用和目标的简单解释。然后,您可以按照您提到的具体案例进行跟进。 Checkstyle 只要求第一句以句点结尾,而不是每句。

    父类 X 有一些它的所有子类都需要和使用的字段 y,但 checkstyle 不允许它,除非通过方法 (getY()) 访问该字段。这是不自然的,IMO。

    既然你完全不喜欢这个,那么只需禁用对受保护字段的检查。 If you look at the documentation for VisibilityModifier,您可以将protectedAllowed 更改为true 并让它忽略这些特定情况。

    我发现我的代码收集了大量试图解决某些警告的 lint。

    在我看来,您似乎并没有根据自己的喜好自定义这些工具,而只是尝试使用默认配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多