如何在使用 PowerMockito 测试框架进行 junit 测试时将接口引用注入 Spring 控制器?



我有 Spring 控制器,其中一个接口是自动连接的,如下面的类所示。

@Controller
public class EmployeeController
{
@Autowired
private EmployeeManager employeeManager;
public int saveEmployee(Employee employee) {
int empId = employeeManager.saveEmployee(employee);
return empId;
}
}

现在,我创建了一个 Junit 测试类,如下所示。

public class EmployeeControllerTest {
private EmployeeController employeeController ; 
private EmployeeManager employeeManager ;
@Before
public void setUp() throws Exception {
employeeController = PowerMockito.spy(new EmployeeController());
employeeManager = PowerMockito.mock(EmployeeManager.class);
}
@Test
public void shouldGetCountOfEmployees()
{ 
Employee emp = new Employee("Peter");
int empId = employeeController.saveEmployee(emp);   
Assert.assertEquals(1, empId);
}

现在在执行测试类后,我在控制器方法内的第int empId = employeeManager.saveEmployee(employee);saveEmployee得到 nullPointerException。

我也尝试@Mock注释,@Spy注释但无法执行测试用例。 因此,在使用 PowerMockito 执行测试用例时,请帮助在控制器中注入employeeManager实例。

谢谢

您必须使用 Whitebox.setInternalState 将模拟注入 EmployeeController 中。

例:

Whitebox.setInternalState(EmployeeController, "employeeManager", employeeManager) ;

我不完全确定这是否正确,但我确实有一个想法。您正在模拟 EmployeeManager 类,将其自动连接到控制器中,并在其上调用一个抛出 NullPointerException 的方法。这样做是因为 EmployeeController 中的 employeeManager 对象是模拟对象,如果你在模拟对象上调用方法,那么它将抛出 NullPointerException。

最新更新