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