无法调用另一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会再次触发空指针。
解决方法
- 调整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); } }
- 修改测试类的
@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
相关产品推荐
相关产品推荐

