4.2 KiB
4.2 KiB
代码审查报告
文件: data\demo-pmd\src\com\demo\errorprone\extra\AfterBeforeTest.java
语言: java
耗时: 121.3s
分析工具: pmd
总计: 11 | 错误: 2 | 警告: 9 | 建议: 0
静态分析 · 7 个问题
- 🔴
pmd:SystemPrintlnL27 使用了 System.out 或 System.err 进行控制台输出。 建议: 建议用日志框架替代 System.out,例如 java.util.logging.Logger 的 info 方法。若为一次性调试代码,可在最终版本删除。 - 🟡
pmd:AtLeastOneConstructorL8 每个类都应声明至少一个构造函数。 建议: 请为类 MissingAfterTest 添加一个显式构造函数,例如 public MissingAfterTest() {}。若不允许实例化,可设为 private。 - 🟡
pmd:TestClassWithoutTestCasesL8 类 'MissingAfterTest' 可能是一个测试类,但它不包含任何测试用例。 建议: 如果该类是测试类,请添加一个带有 @Test 注解的测试方法;若不需要测试,请删除该类或重命名为非测试类名称。添加注解时需引入 JUnit 依赖。 - 🟡
pmd:AtLeastOneConstructorL14 每个类都应声明至少一个构造函数。 建议: 请为类 MissingBeforeTest 添加一个显式构造函数,例如 public MissingBeforeTest() {}。若不允许实例化,可设为 private。 - 🟡
pmd:TestClassWithoutTestCasesL14 类 'MissingBeforeTest' 可能是一个测试类,但它不包含任何测试用例。 建议: 如果该类是测试类,请添加一个带有 @Test 注解的测试方法;若不需要测试,请删除该类或重命名为非测试类名称。添加注解时需引入 JUnit 依赖。 - 🟡
pmd:AtLeastOneConstructorL20 每个类都应声明至少一个构造函数。 建议: 请为类 MissingTestAnn 添加一个显式构造函数,例如 public MissingTestAnn() {}。若不允许实例化,可设为 private。 - 🟡
pmd:UnitTestShouldUseTestAnnotationL21 单元测试应使用 @Test 注解,否则不会运行。若是 JUnit Jupiter,测试方法可使用 @RepeatedTest、@TestFactory、@TestTemplate 或 @ParameterizedTest 注解替代。 建议: 为 testSomething 方法添加 @Test 注解(JUnit 4/5),或根据场景改用 @RepeatedTest/@TestFactory/@TestTemplate/@ParameterizedTest。
AI 审查 · 4 条建议
- 🔴 [AI] [bug]
multiple-public-classes-in-fileL14 一个源文件中存在多个 public 类,无法编译 Java 允许一个源文件中最多有一个 public 顶层类,且必须与文件名一致。当前文件中第 8、14、20 行分别声明了 MissingAfterTest、MissingBeforeTest、MissingTestAnn 三个 public 类,导致编译失败。 建议: 将 MissingBeforeTest 和 MissingTestAnn 改为包级私有(去掉 public),或拆分到独立文件。若文件名不是 MissingAfterTest.java,还需要调整类名或文件名使二者一致。 - 🟡 [AI] [bug]
missing-junit-importsL5 使用 JUnit 注解前未导入相关包 代码中已有 tearDown/setUp/testSomething 等测试相关方法,后续修复需要添加 @After/@Before/@Test 注解,但当前没有任何 JUnit 的 import 语句,添加注解后将因找不到符号而编译失败。 建议: 在文件顶部添加 JUnit 4 导入,例如 import org.junit.After; import org.junit.Before; import org.junit.Test;。如果使用 JUnit 5,请改为导入 org.junit.jupiter.api.*。同时确保 classpath 包含 JUnit 依赖。 - 🟡 [AI] [design]
empty-lifecycle-methodL9 空的 setUp/tearDown 生命周期方法没有实际作用 MissingAfterTest.tearDown 与 MissingBeforeTest.setUp 方法体为空,即使补充 @After/@Before 注解,也不会执行任何初始化或清理逻辑,容易引入误导。 建议: 在方法中实现实际的资源初始化/清理逻辑;如果不需要,则删除这两个空方法。 - 🟡 [AI] [design]
missing-assertions-in-testL21 testSomething 方法缺少断言,测试无效 MissingTestAnn.testSomething 方法即使添加 @Test 注解,也因为没有断言而无法验证任何行为,空测试会通过并掩盖回归问题。 建议: 在该方法中补充实际的断言,例如使用 org.junit.jupiter.api.Assertions 中的 assertEquals、assertNotNull 等方法,验证被测对象的行为和预期结果。