3.6 KiB
3.6 KiB
代码审查报告
文件: data\demo-pmd\src\com\demo\errorprone\extra\JUnit5ArgOrderTest.java
语言: java
耗时: 94.8s
分析工具: pmd
总计: 12 | 错误: 2 | 警告: 8 | 建议: 2
静态分析 · 9 个问题
- 🔴
pmd:SystemPrintlnL24 使用了 System.out / System.err。 建议: 移除该输出语句,或改用日志框架(如 java.util.logging、SLF4J)进行记录。 - 🟡
pmd:AtLeastOneConstructorL10 每个类都应声明至少一个构造函数。 建议: 为类添加一个显式的构造函数,例如:public JUnit5ArgOrderTest() {},或确保存在其他构造函数。 - 🟡
pmd:JUnitJupiterTestShouldBePackagePrivateL10 JUnit 5 测试类应为包私有(不要使用 public 修饰符)。 建议: 将public class JUnit5ArgOrderTest改为class JUnit5ArgOrderTest,使测试类为包私有。 - 🟡
pmd:JUnitJupiterTestShouldBePackagePrivateL12 JUnit 5 测试方法应为包私有(不要使用 public 修饰符)。 建议: 将public void testX()改为void testX()。 - 🟡
pmd:LocalVariableCouldBeFinalL13 局部变量actual可以声明为 final。 建议: 在变量声明处添加final修饰符:final String actual = next("foo");。 - 🟡
pmd:AssertEqualsArgumentOrderL14 此 assertEquals() 调用的 expected 和 actual 参数顺序颠倒了。 建议: 将期望值作为第一个参数,实际值作为第二个参数:assertEquals("bar", actual);。 - 🟡
pmd:UnitTestAssertionsShouldIncludeMessageL14 单元测试断言应包含一个描述性消息。 建议: 为断言添加消息参数:assertEquals(expected, actual, "消息内容");,例如assertEquals("bar", actual, "next() 的返回值应等于 bar");。 - 🟡
pmd:CommentDefaultAccessModifierL17 方法next(String)缺少默认访问修饰符(包私有)的注释。 建议: 在方法前添加注释/* package */,或者显式声明访问修饰符(如private)。 - 🟡
pmd:MethodArgumentCouldBeFinalL17 参数s未被赋值,可以声明为 final。 建议: 在参数类型前添加final:String next(final String s)。
AI 审查 · 3 条建议
- 🔴 [AI] [bug]
wrong-test-expectationL14 测试断言期望值与实际输入不匹配next("foo")返回"foo"(因为next直接返回参数),但断言期望值为"bar"。即使把 assertEquals 参数顺序调整正确,assertEquals("bar", actual)仍会失败,因为actual是"foo"。请检查测试意图:要么将期望值改为"foo",要么让next方法产生"bar"作为结果。 建议: 如果next被设计为恒等函数,应将断言改为assertEquals("foo", actual);否则修改next的实现以返回预期值。 - 🔵 [AI] [design]
method-can-be-staticL17 辅助方法可声明为 staticnext(String)不访问任何实例字段或实例方法,应声明为static,以更清晰地表达其无状态性,并避免实例持有。 建议: 将String next(String s)改为static String next(String s);调用处next("foo")在实例方法内仍可调用静态方法,无需修改。 - 🔵 [AI] [design]
top-level-class-in-test-fileL22 测试文件中不应包含无关的顶层类Junit5Main是一个独立的顶层类,包含main方法,却与测试类JUnit5ArgOrderTest放在同一个源文件中。这样会降低可读性,并可能导致构建工具扫描到非测试类。建议将Junit5Main移到单独的Junit5Main.java文件中。 建议: 将Junit5Main类移到独立文件,或将其从测试源集中移除。