You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestNG中@BeforeClass注解方法未执行问题排查

为什么你的@BeforeClass方法没有被调用?

我来帮你拆解几个核心问题,按影响优先级排序:

1. 测试方法是private的,TestNG根本识别不了

你的test1()方法用了private修饰符,但TestNG明确要求:所有标注@Test的测试方法必须是public的,否则会直接被TestNG忽略,相当于当前测试类没有可执行的测试用例。

当测试类里没有任何能被执行的测试方法时,TestNG不会触发类初始化相关的生命周期方法(包括@BeforeClass),这是导致你的setUp()没被调用的最直接原因。

修复方法:把test1()的修饰符改成public:

@Test(groups = {"group1"})
public void test1(){
    System.out.println("test1");
    assertEquals(true, true);
}

2. @BeforeClass方法的签名需符合TestNG规则

虽然你的setUp()是public的,但还有个细节要注意:TestNG的@BeforeClass如果是实例方法(非static),它的执行依赖于测试类的实例化——只有当存在可执行的测试方法时,TestNG才会创建测试类实例并调用这个方法。

如果想让@BeforeClass方法在类加载后就执行(这种场景比较少见,一般不需要),可以把它改成public static:

@BeforeClass
public static void setUp() {
    System.out.println("SetUp");
}

不过更常规的用法是保持@BeforeClass为实例方法,同时确保有可执行的public测试方法,这样TestNG会在第一个测试方法运行前自动调用它。

额外检查点

  • 确认你的测试类被TestNG正确识别(比如在testng.xml里配置了该类,或者IDE的TestNG运行器选中了它)
  • 检查是否误用了JUnit的@BeforeClass注解(要使用TestNG的org.testng.annotations.BeforeClass)

内容的提问来源于stack exchange,提问作者Daniel André

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:57:25