JUnit 中已初始化对象的空指针异常即将到来

问题描述

我有以下类的实现..'EmpAddress' 是一个接口 &'EmployeeInterfaceFactory' 是一个具有静态方法 'getAddressImpl' 的类,它提供 EmpAddress 实现的类对象......我有 JUnit 方法,如下所示空指针异常...在实现此 JUnit 时需要帮助/建议...

***************************************************************************
public class Employee(){

private Address address = new Address();

public String getEmployeeDetails(){
  String details = address.getDetails();
  return details;
}
}
***************************************************************************
public Address address(){

private EmpAddress empAddress = EmployeeInterfaceFactory.getAddressImpl();

public String getDetails(){

String details = empAddress.getEmpDetails();  // Null pointer exception coming here
return details;
}
}
****************************************************
@RunWith(powermockrunner.class)
@PrepareForTest({EmployeeInterfaceFactory.class})
public class Employeetest(){

Employee emp;
EmpAddress empAddress;

@Before
public void setUp(){
 emp = new Employee();
 empAddress = createMock(EmpAddress.class);
 mockStatic(EmployeeInterfaceFactory.class);
}

@Test
public void getEmployeeDetailstest(){
  expect(EmployeeInterfaceFactory.getAddressImpl()).andReturn(empAddress);
  expect(empAddress.getEmpDetails()).adnReturn("testing data");

  String result = emp.getEmployeeDetails();
}
}

解决方法

检查您是否在第 private EmpAddress empAddress = EmployeeInterfaceFactory.getAddressImpl(); 行获得 empAdress,也许您可​​以将其移动到 setUp 方法,在 setUp 方法中调用 getDetails,这样 empAdress 就不是当您尝试在 getDetails

中访问它时为 null

在 TestCase 中,您返回的是尚未初始化的 empAddress,这会导致空指针 expect(EmployeeInterfaceFactory.getAddressImpl()).andReturn(empAddress);