
testng允许将@test标注的方法设为包级私有(默认访问级别),这既满足框架调用要求,又提升代码简洁性与可读性,无需冗余声明public或private。
testng允许将@test标注的方法设为包级私有(默认访问级别),这既满足框架调用要求,又提升代码简洁性与可读性,无需冗余声明public或private。
在TestNG中,@Test标注的方法不需要声明为public——这是与JUnit 4的重要区别(JUnit 4强制要求test方法必须为public)。TestNG通过反射机制调用测试方法时,只要方法具备可访问性(即对TestNG的运行时类可见),即可正常执行。而Java中不加访问修饰符的方法默认为包级私有(package-private),该级别已足以被同一包下的TestNG核心类(如Invoker、MethodInvocationHelper)反射调用。
✅ 推荐写法(简洁、规范、符合现代实践):
@Test
void shouldCalculateTotalPriceCorrectly() {
// 测试逻辑
assertEquals(120.0, order.calculateTotal(), 0.01);
}
@Test
void shouldThrowExceptionWhenQuantityIsNegative() {
assertThrows(IllegalArgumentException.class, () ->
new Product("Laptop", -5, 1000.0));
}
❌ 不推荐写法及原因:
针对嵌入式/固件项目的专家代码审查,采用双模型交叉审查(Claude + Codex via ACP),检测内存安全、中断危险、RTOS陷阱...
- public void testXXX():冗余。public未提供额外语义价值,反而增加视觉噪声,违背“最小权限原则”——测试方法本就不应被外部类调用;
- private void testXXX():编译可通过,但运行时会失败。TestNG无法反射访问private方法(即使在同一类中),会抛出IllegalAccessException或静默跳过,导致测试未执行却无提示,极易引发漏测风险;
- protected void testXXX():无必要。protected扩大了访问范围,且不增强TestNG兼容性,纯属过度设计。
? 注意事项:
- 确保测试类与TestNG依赖版本兼容(TestNG 6.0+ 全面支持默认访问修饰符);
- 若项目启用了严格静态分析工具(如SonarQube、Checkstyle),需配置规则允许测试方法省略访问修饰符;
- 团队应统一约定:所有测试方法均采用默认访问级别,禁止混用public/protected/private,以强化一致性与可维护性。
总结:删掉public不是偷懒,而是遵循框架设计意图与简洁性原则。让代码只表达必要信息——@Test已明确声明“这是一个测试”,访问修饰符在此场景下纯属噪音。










