为了账号安全,请及时绑定邮箱和手机立即绑定

Pmd规则:过多的静态导入可能导致unitTest中的代码混乱不违反

Pmd规则:过多的静态导入可能导致unitTest中的代码混乱不违反

Cats萌萌 2023-09-27 10:04:46
我有一个疑问,我有一个类,在其中我对导入常量使用不同的静态导入,我的问题是我收到错误消息:Too many static imports may lead to messy code。但在单元测试中看起来这并不是一个坏习惯。例如,在单元测试类中,我使用此导入来解决任何问题: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 文件来找出此问题的真正原因。有什么线索吗?
查看完整描述

5 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

我已经使用 @SuppressWarnings("PMD.TooManyStaticImports") 来避免在我的班级中出现此问题。



查看完整回答
反对 回复 2023-09-27
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

如果您使用maven-pmd-plugin,它默认会忽略测试。您可以将其配置为includeTests

    <plugin>

        <artifactId>maven-pmd-plugin</artifactId>

        <executions>

            <execution>

                <phase>package</phase>

                    <goals>

                        <goal>check</goal>

                    </goals>

            </execution>

       </executions>

       <configuration>

           <rulesets>

               <ruleset>/my-custom-rules.xml</ruleset>  // Your own rules here

           </rulesets>

           <includeTests>true</includeTests> // Default value is false

       </configuration>

    </plugin>

关于TooManyStaticImports规则,就像任何其他 PMD 规则一样,它可能是主观的,并且不一定适合所有用例或代码风格。这就是为什么它说“可能导致混乱的代码”。

一般来说,如果您想静音一个类的规则,您可以使用:

@SuppressWarnings("PMD.TooManyStaticImports")

或者,如果您想微调规则,您可以提供自己的自定义配置,例如:

<rule ref="category/java/codestyle.xml/TooManyStaticImports">

    <properties>

        <property name="maximumStaticImports" value="6" /> // Default is 4

    </properties>

</rule>


查看完整回答
反对 回复 2023-09-27
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

这似乎是令人反感的 PMD 配置或规则;特别是在测试中,这种静态导入是可以预料的。应更改 PMD 设置以完全禁用此检查或不将其应用于测试代码。



查看完整回答
反对 回复 2023-09-27
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

基本上这是不好的做法,因为您引用另一个类的静态字段,在某种程度上您可以从当前文件中寻址静态属性。为了防止出现此 PMD 错误,您必须进行合格的调用。


代替:


BAD_REQUEST;

INTERNAL_SERVER_ERROR;

NOT_FOUND;

UNPROCESSABLE_ENTITY;

称呼:


HttpStatus.BAD_REQUEST;

HttpStatus.INTERNAL_SERVER_ERROR;

HttpStatus.NOT_FOUND;

HttpStatus.UNPROCESSABLE_ENTITY;


查看完整回答
反对 回复 2023-09-27
?
波斯汪

TA贡献1811条经验 获得超4个赞

您可以尝试导入上一级。
例如,使用Constant.MY_VAR而不是直接使用MY_VAR. 因此,您不必在 Constant 中单独导入每个变量,只需导入 Constant 并使用Constant.MY_VAR.

查看完整回答
反对 回复 2023-09-27
  • 5 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信