【问题标题】:EasyMock chained method call producing null pointer exceptionEasyMock 链式方法调用产生空指针异常
【发布时间】:2013-08-10 05:52:01
【问题描述】:

我正在使用 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() 不为空,但返回的 lineItems 是

【问题讨论】:

    标签: java easymock


    【解决方案1】:

    您可能需要添加 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);
    

    【讨论】:

    • 刚试过。这样做会导致 EasyMock.expect(ctx.getOrder().getTopLevelLineItems()).andReturn(lineItems) 上出现空指针
    • 在所有期望调用之后放置回复。否则,模拟将不会处于正确的“状态”。
    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多