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

无法调用另一Java类的addAccount方法,JUnit测试报空指针异常

问题原因
  • 测试类中的Processor实例未初始化。你仅在@BeforeEach中对bank成员变量做了实例化,processor始终为null,调用processor.openCheckingsAccount时会直接触发空指针异常。
  • Processor类和测试类使用的是完全独立的Bank实例。Processor内部直接写了Bank bank = new Bank();,自己维护了一个Bank对象,和测试类里单独实例化的bank没有任何关联,就算你成功调用了Processor的方法,操作的也是Processor内部的Bank,测试类里的Bank永远是空的,调用bank.getAccounts().get("checkings")会返回null,后续调用getAccountNumber会再次触发空指针。
解决方法
  1. 调整Processor类的设计,改用依赖注入传入Bank实例,不要自己内部实例化,保证测试类和Processor使用同一个Bank对象:
public class Processor {
    Bank bank;
    // 通过构造方法传入外部的Bank实例
    public Processor(Bank bank) {
        this.bank = bank;
    }

    public void openCheckingsAccount(String accType, int accNum, double apr) {
        bank.addAccount(accType, accNum, apr);
    }
}
  1. 修改测试类的@BeforeEach逻辑,同时初始化processor,并且把测试类的Bank实例传入Processor:
public class ProcessorTest {
    Bank bank;
    Processor processor;

    @BeforeEach
    void setUp() {
        bank = new Bank();
        // 把同一个Bank实例传给Processor
        processor = new Processor(bank);
    }

    @Test
    void create_checkings_and_verify_by_id_apr() {
        processor.openCheckingsAccount("checkings", 11111111, 0.6);
        System.out.println(bank.accounts);
        assertEquals(11111111, bank.getAccounts().get("checkings").getAccountNumber());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:00