EasyMock链式方法调用产生空指针异常

时间:2013-08-09 18:14:17

标签: java 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()) 

似乎我已经正确设置了链式呼叫,是否有人对此处可能出现的问题有任何建议?

编辑:我想添加我将链拆分为被测试类中的不同行,看来ctx.getOrder()不是null但是返回的lineItem是

1 个答案:

答案 0 :(得分: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);