Easymock 在模拟对象上调用方法时会抛出 NPE

问题描述 投票:0回答:1

我正在尝试在测试类中使用这个模拟:

    @Mock
    private IDPool idPool;

    @Before
    private void before() {
        expect(idPool.getNextFree()).andReturn(TRACK_ID).anyTimes(); //line 63
    }

当我运行它时,我得到 NPE:

java.lang.NullPointerException
    at com.mycompany.IDPool.getNextFree(IDPool.java:68)
    at com.mycompany.Test.before(Test.java:63)

看起来它试图运行生产代码而不是模拟?因为 NPE 是在 IDPool 类中抛出的:

    public final Integer getNextFree() {
        int nextFree;
        synchronized (this.usedIDs) { //line 68
            //...
        }
    }

我认为模拟不使用实际的实现?我可以模拟这个对象,这样它就不会出现吗?

java nullpointerexception easymock
1个回答
0
投票

我会发表评论,但我没有足够的声誉。
您对 EasyMock 无法模拟最终方法(或类)的怀疑是正确的。 但是,您可以使用PowerMock。我现在无法验证它,但使用

PowerMock.createMock(IDPool.class)
初始化模拟应该启用最终方法模拟。
这个答案文档应该对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.