Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pmd规则:太多的静态导入可能会导致unitTest中的混乱代码未被违反_Java_Pmd_Static Import - Fatal编程技术网

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>