java - Checkstyle 和 PMD 仅作为建议

标签 java checkstyle pmd software-quality

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

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

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

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

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

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

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

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

一种选择是永久关闭造成最麻烦的检查,但是根据上下文,检查可能会很麻烦,也可能非常有用。 我认识到,在代码中显式抑制警告也是一种记录方法,仅在特定上下文中,检查是无关紧要且烦人的。令我烦恼的是抑制的数量,几乎每个测试类都需要抑制,而其他一些类需要解决方法。

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

最佳答案

Test-classes contain ...
A class under test ...
In test classes ...

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

这种情况很常见,就像在 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.您还可以查看检查选项,看看是否可以将其配置为忽略您的情况。

Sometimes my documentation will be: "This method makes sure that X in the following 3 cases: \n ...".

我不能肯定地说,因为我不知道你的方法的内容,但第一句话应该是对该方法的作用及其目标的简单解释。然后你就可以根据你提到的具体案例来进行操作。 Checkstyle只要求第一个句子以句号结尾,而不是每个句子。

Parent class X has some field y that all its children need and use, but checkstyle won't allow it unless the field is accessed through a method (getY()). This is just unnatural, IMO.

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

i find that my code collects a lot of lint trying to work around some of the warnings.

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

关于java - Checkstyle 和 PMD 仅作为建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46444401/

相关文章:

java - 如何在 JavaFX 中异步执行需要一些 GUI 操作的较长运行任务?

java - Android OpenCV HoughLinesP 崩溃

java - Checkstyle:CheckstyleException:无法找到但文件存在

java - 错误等于通过 PMD 发出警告

Jenkins 构建失败但在本地机器上一切正常

java - 是否可以使用 th-field 来检索 Thymeleaf 中列表的值?

java - 使用指纹登录认证

android - 无法禁用Android Checkstyle错误

java - 如何抑制枚举常量/值缺少 javadoc checkstyle 警告?

java - 如何在不使用 I/O 的情况下获取 PMD 报告及其详细信息?