Java Pmd规则:太多的静态导入可能会导致unitTest中的混乱代码未被违反
我有一个疑问,我在一个类中使用了不同的静态导入来导入常量,我的问题是我得到了错误消息:Java Pmd规则:太多的静态导入可能会导致unitTest中的混乱代码未被违反,java,pmd,static-import,Java,Pmd,Static Import,我有一个疑问,我在一个类中使用了不同的静态导入来导入常量,我的问题是我得到了错误消息:太多的静态导入可能会导致混乱的代码。但在单元测试中,这似乎不是一个坏的做法。例如,在单元测试类中,我使用此导入处理任何问题: import static com.rccl.middleware.kidsclub.engine.web.controller.KidController.KID_FIND_PATH; import static com.rccl.middleware.kidsclub.engine.
太多的静态导入可能会导致混乱的代码。但在单元测试中,这似乎不是一个坏的做法。例如,在单元测试类中,我使用此导入处理任何问题:
import static com.rccl.middleware.kidsclub.engine.web.controller.KidController.KID_FIND_PATH;
import static com.rccl.middleware.kidsclub.engine.web.controller.KidController.KID_LIST_PATH;
import static com.rccl.middleware.kidsclub.engine.web.controller.KidController.KID_PATH;
import static com.rccl.middleware.kidsclub.engine.web.controller.KidController.KID_REGISTER_ALL_PATH;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
import static org.mockito.Mockito.times;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;```
相反,在我的班上:
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
import static org.springframework.http.HttpStatus.NOT_FOUND;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
这些导入给我带来了问题,我得到了错误消息:太多的静态导入可能会导致混乱的代码。我不太清楚为什么
我无法访问pmd文件以找出此问题的真正原因。有线索吗
谢谢 这似乎是一个令人反感的PMD配置或规则;特别是在测试中,这种静态导入是可以预期的。应更改PMD设置以完全禁用此检查或不将其应用于测试代码。我已使用@SuppressWarnings(“PMD.TooManyStaticImports”)在我的类中避免此问题。虽然这不是问题的答案,这确实让我想知道PMD是否可以有一个注释,允许用户覆盖一个或多个源文件甚至包中的规则配置?
唯一的问题是,这将引入编译时依赖关系。如果在包级别引入,是否值得?这种易怒商有什么规定吗?我想到了得墨忒尔定律
至于问题本身,在实际导入整个类时,使用星型导入进行静态导入。它不那么冗长,也不那么丑陋 对我来说,显式地、具体地导入所有静态还是更好的,因为它加载比导入所有(*)更快,其中一个原因是我们更喜欢Java中的显式的东西
因此,我建议禁用此PMD规则检查
干杯。首先,PMD没有抱怨您的测试类最可能的原因是它根本没有扫描您的测试类。如果您使用的是maven pmd插件,则可以将其配置为includeTests
。看
或者,如果您想微调规则,您可以提供自己的自定义配置,例如:
<rule ref="category/java/codestyle.xml/TooManyStaticImports">
<properties>
<property name="maximumStaticImports" value="6" /> // Default is 4
</properties>
</rule>
//默认值为4
No不是。这是pmd错误。该规则有一个maximumStaticImports
属性来设置“太多”的数量。根据您的喜好调整该值,毕竟,这是一个代码样式规则。阅读这里的文档:在生产代码(=非测试代码)中,代码质量比冗长性更重要。我认为当前设置最初来自断言导入。如上所述,使用限定的HttpStatus.SAD\u请求
,尤其是当您仍然有案例SAD\u请求:
时,没有任何错误。这并没有提供问题的答案。您可以,也可以参考页面右侧的相关和链接问题来找到答案。如果您有一个相关但不同的问题,并包含指向此问题的链接以帮助提供上下文。看:很高兴知道。我想添加它作为一个评论,但我还没有要点这样做。我对积累分数不感兴趣,只是为了发表评论。我删除了这个答案,因为我意识到SuppressWarnings注释工作得很好。没有必要添加一个可重写的。另一种选择是存储运行数据,并尝试将其用作建议修改规则参数的培训数据。最好澄清是否建议使用该解决方案。我宁愿不使用此解决方案,因为它需要在大量文件中引入。。。最好是通过排除整个项目的规则来实现,这样你就只有一个地方可以控制这个规则,而不是无数个地方
@SuppressWarnings("PMD.TooManyStaticImports")
<rule ref="category/java/codestyle.xml/TooManyStaticImports">
<properties>
<property name="maximumStaticImports" value="6" /> // Default is 4
</properties>
</rule>