Files

4.2 KiB

代码审查报告

文件: 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 等方法,验证被测对象的行为和预期结果。