2013-08-09 2 views
0

Я использую EasyMock, чтобы попробовать и издеваться над итерацией через список элементов, находящихся на двух уровнях. Мой блок кода тест нижеПривязанный вызов метода EasyMock, вызывающий исключение нулевого указателя

EventContext ctx = EasyMock.createMock(EventContext.class); 
    Order order = EasyMock.createMock(Order.class); 
    Item oli = new Item(); 
    oli.setProduct(370); 
    List<Item> lineItems = new ArrayList<Item>(); 
    lineItems.add(oli); 
    EasyMock.expect(ctx.getOrder()).andReturn(order).times(2); 
    EasyMock.expect(order.getTopLevelLineItems()).andReturn(lineItems); 

и код он пытается теста

for(Item item : (List<Item>) ctx.getOrder().getTopLevelLineItems()) { 
      if(370 == item.getProduct()) { 
       result = true; 
      } 

Но когда блок работает тест я получаю NullPointerException на линии ниже:

for(Item item : (List<Item>) ctx.getOrder().getTopLevelLineItems()) 

Кажется, я правильно настроил цепочку, у кого есть какие-то предложения о том, что здесь может быть неправильным?

Edit: Я хочу добавить я отщепляются цепь на разные линии в классе тестируется и, кажется, что ctx.getOrder() не равно нулю, но lineItems возвращаемые

ответ

2

Вы, вероятно, нужно добавить EasyMock.replay();

EventContext ctx = EasyMock.createMock(EventContext.class); 
    Order order = EasyMock.createMock(Order.class); 
    Item oli = new Item(); 
    oli.setProduct(370); 
    List<Item> lineItems = new ArrayList<Item>(); 
    lineItems.add(oli); 

    EasyMock.expect(order.getTopLevelLineItems()).andReturn(lineItems).times(2); 
    EasyMock.replay(order); 
    EasyMock.expect(ctx.getOrder()).andReturn(order).times(2); 
    EasyMock.replay(ctx); 
+0

Только что попробовал. Это приводит к нулевому указателю на EasyMock.expect (ctx.getOrder(). GetTopLevelLineItems()) andReturn (lineItems) – thurmc

+0

Положите ответ после всех ожидающих вызовов. В противном случае mocks не будет в правильном «состоянии». – dplass

Смежные вопросы