pmd规则:静态导入过多可能导致代码乱码 未违反unitTest
Pmd rule: Too many static imports may lead to messy code in unitTest is not violated
我有疑问,我有一个 class,其中我对导入常量使用不同的静态导入,我的问题是我收到错误消息:Too many static imports may lead to messy code
。但在单元测试中,这似乎不是一个坏习惯。例如,在单元测试 class 中,我使用此导入遇到任何问题:
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;```
相反在我的 class:
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 设置以完全禁用此检查或不将其应用于测试代码。
我在 class.
中使用了 @SuppressWarnings("PMD.TooManyStaticImports") 来避免这个问题
虽然这不是问题的答案,但它确实让我想知道 PMD 是否可以有一个注释,允许用户覆盖一个或多个源文件甚至包中的规则配置?
唯一的问题是这会引入编译时依赖性。如果在包级别引入,是否值得?那种暴躁商数有什么规定吗?想到得墨忒耳法则。
至于问题本身,当您实际导入整个 class 时,使用星号导入进行静态导入。它不那么冗长,也不那么丑陋。
对我来说,显式和具体地导入所有静态仍然更好,因为它比导入所有 (*) 更快加载,原因之一是我们更喜欢Java.
中的显式 事物
因此,我建议禁用此 PMD 规则检查。
干杯。
首先,PMD 没有抱怨您的测试 class 的最可能原因是它根本没有扫描您的测试 classes。如果您使用的是 maven pmd 插件,您可以将其配置为 includeTests
。参见 Docs
<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 规则一样,它可能是主观的,不一定适合所有用例或代码风格。这就是为什么它说“可能 导致代码混乱”。 There are arguments for and against its usage.
一般来说,如果你想为一个 class 忽略一条规则,你可以使用:
@SuppressWarnings("PMD.TooManyStaticImports")
或者,如果您想要 fine-tune 规则,您可以提供您自己的自定义配置,例如:
<rule ref="category/java/codestyle.xml/TooManyStaticImports">
<properties>
<property name="maximumStaticImports" value="6" /> // Default is 4
</properties>
</rule>
您可以尝试导入上一级。
例如,使用 Constant.MY_VAR
而不是直接使用 MY_VAR
。所以你不必在 Constant 中单独导入每个变量,你可以只导入 Constant 并在代码中使用 Constant.MY_VAR
.
访问变量
基本上这是不好的做法,因为您从另一个 Class 引用静态字段,在某种程度上您会从当前文件寻址静态 属性。要防止此 PMD 错误,您必须进行合格的调用。
而不是:
BAD_REQUEST;
INTERNAL_SERVER_ERROR;
NOT_FOUND;
UNPROCESSABLE_ENTITY;
通话:
HttpStatus.BAD_REQUEST;
HttpStatus.INTERNAL_SERVER_ERROR;
HttpStatus.NOT_FOUND;
HttpStatus.UNPROCESSABLE_ENTITY;
我有疑问,我有一个 class,其中我对导入常量使用不同的静态导入,我的问题是我收到错误消息:Too many static imports may lead to messy code
。但在单元测试中,这似乎不是一个坏习惯。例如,在单元测试 class 中,我使用此导入遇到任何问题:
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;```
相反在我的 class:
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 设置以完全禁用此检查或不将其应用于测试代码。
我在 class.
中使用了 @SuppressWarnings("PMD.TooManyStaticImports") 来避免这个问题虽然这不是问题的答案,但它确实让我想知道 PMD 是否可以有一个注释,允许用户覆盖一个或多个源文件甚至包中的规则配置? 唯一的问题是这会引入编译时依赖性。如果在包级别引入,是否值得?那种暴躁商数有什么规定吗?想到得墨忒耳法则。
至于问题本身,当您实际导入整个 class 时,使用星号导入进行静态导入。它不那么冗长,也不那么丑陋。
对我来说,显式和具体地导入所有静态仍然更好,因为它比导入所有 (*) 更快加载,原因之一是我们更喜欢Java.
中的显式 事物因此,我建议禁用此 PMD 规则检查。
干杯。
首先,PMD 没有抱怨您的测试 class 的最可能原因是它根本没有扫描您的测试 classes。如果您使用的是 maven pmd 插件,您可以将其配置为 includeTests
。参见 Docs
<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 规则一样,它可能是主观的,不一定适合所有用例或代码风格。这就是为什么它说“可能 导致代码混乱”。 There are arguments for and against its usage.
一般来说,如果你想为一个 class 忽略一条规则,你可以使用:
@SuppressWarnings("PMD.TooManyStaticImports")
或者,如果您想要 fine-tune 规则,您可以提供您自己的自定义配置,例如:
<rule ref="category/java/codestyle.xml/TooManyStaticImports">
<properties>
<property name="maximumStaticImports" value="6" /> // Default is 4
</properties>
</rule>
您可以尝试导入上一级。
例如,使用 Constant.MY_VAR
而不是直接使用 MY_VAR
。所以你不必在 Constant 中单独导入每个变量,你可以只导入 Constant 并在代码中使用 Constant.MY_VAR
.
基本上这是不好的做法,因为您从另一个 Class 引用静态字段,在某种程度上您会从当前文件寻址静态 属性。要防止此 PMD 错误,您必须进行合格的调用。
而不是:
BAD_REQUEST;
INTERNAL_SERVER_ERROR;
NOT_FOUND;
UNPROCESSABLE_ENTITY;
通话:
HttpStatus.BAD_REQUEST;
HttpStatus.INTERNAL_SERVER_ERROR;
HttpStatus.NOT_FOUND;
HttpStatus.UNPROCESSABLE_ENTITY;