2013-06-01 101 views
0

我有一个方法返回车辆列表。就像这样:Mockito - 方法内的模拟对象

public List<Vehicle> getVehicles() { 

     List<Vehicle> vehicles=vehicleDAO.getAllVehicles(); 

     for (Vehicle v : vehicles){//NullPointerException 
      //some bussines logic... 
     }  
     return vehicles; 

} 

这里是我的测试:

@Test 
public void testShowVehicles() { 
    when(vehicleDAO.getAllVehicles()).thenReturn(listVehiclesMock); 
    List<Vehicle> vehicles= service.getVehicles();//NullPointerException 
    assertEquals(listVehicleMock, vehicles); 
} 

当我运行它,我得到的NullPointerException,因为车辆不能存在。 当我有老式的循环它通过测试,但现在我换成forEach循环我得到测试错误。 那么,我会如何嘲笑对象车辆?

回答

2

对于每个循环使用iterator()给定的方法Iterable。然后用这种方式获得的迭代器遍历集合。不幸的是,这个模拟列表的方法返回null,这会导致NullPointerException。要使用每个循环语法,您必须将iterator()方法与结果绑定。

+0

你可以给我一些提示,我将如何绑定'iterator()'到测试。 –

+5

而不是从一个模拟对象返回一个模拟列表,它可能更容易返回一个单一的车辆对象的实际列表。这样,您就不必编写其他_when_子句并避免在业务逻辑中出现NullPointerException。 –

+0

这是否可以返回实际列表而不是模拟列表? –