2013-06-01 131 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

這是否可以返回實際列表而不是模擬列表? –