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

Eclipse使用JUnit5时@BeforeEach未初始化对象 测试报空指针异常

问题根因

这个空指针和JUnit 5配置、@BeforeEach注解失效没有任何关系,纯粹是Java变量作用域书写错误:

  • 测试类里定义的Account account;是类成员变量,未手动赋值时默认值为null
  • 你在setUp()方法里写的Account account = new Account();是在方法内部重新声明了一个和成员变量同名的局部变量,new出来的Account实例只赋值给了这个局部变量,方法执行结束后局部变量就会被回收,类层面的成员变量account自始至终都没被赋值,一直保持null
  • 你在setUp方法里打印account.owner能正常输出结果,是因为那行代码读取的是方法内的局部变量,测试方法中调用的是从未赋值的null成员变量,自然会抛出空指针异常。
修复方法

把setUp()方法中变量前的类型声明Account删掉,直接给类成员变量赋值即可,修正后的setUp代码如下:

@BeforeEach
void setUp() {
    // 去掉前面的Account类型声明,不要新建同名局部变量
    account = new Account();
    System.out.println("Hi" + account.owner);
}

修改后每个测试方法执行前,都会正确初始化类成员变量account,空指针异常就会消失。


相关代码参考

原错误测试类核心片段

class AccountTest {
    Account account; // 类成员变量,默认值为null

    @BeforeEach
    void setUp() {
        // 错误点:声明了同名局部变量,没有给外部成员变量赋值
        Account account = new Account();
        System.out.println("Hi" + account.owner); // 此处读取局部变量,输出正常
    }
    
    @Test  
    void assertBeforeEachWorking() {
        System.out.println("Befroe each? ");
        System.out.println(account.owner); // 此处读取值为null的成员变量,抛出空指针
    }
}

Account类定义

package account;

public class Account {
    int amount ;
    String owner = "default owner";
}

内容的提问来源于stack exchange,提问作者lingar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:45:58