java - PowerMock在queue.add方法中抛出空指针异常

标签 java unit-testing powermock easymock

我正在使用 Powermock 对类进行单元测试。

该类有一个对象列表队列作为私有(private)成员。 我使用 PowerMock createPartialMock 部分模拟其中两个方法(例如 A 和 B),然后显式调用方法 C 并进行验证。

Class Sample {
    Queue<List> q;

    public C() {  
        A(); 
        B(); 
        q.add(List);
    }

    private A() {}
    private B() {}
}

Class Test {
    void testSomeMethod() {
        Sample mock = PowerMock.createPartialMock(Sample.class, "A", "B");
        PowerMock.expectPrivate(Sample.class, A).thenReturn("true");
        PowerMock.expectPrivate(Sample.class, B).thenReturn("true");

        mock.C();
        PowerMock.verify(mock);
    }
}

现在,当我运行测试时,PowerMock 在 q.add(List); 行抛出异常。

任何人都可以指出我犯了什么错误吗? 我也期望 q.add() 方法调用吗?

最佳答案

您应该以某种方式为 Sample 类的 q 属性分配一个值。 这可以在构造函数上通过 setter 方法或反射(Whitebox 类或纯 Java 反射代码)来完成。

如果需要检查某个项目是否添加到 q 中,请创建 Queue 接口(interface)的模拟。

关于java - PowerMock在queue.add方法中抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438593/

相关文章:

java - 如何通过 Java 编辑 jpg 图像?

java - Java 中的 com.itextpdf.tool.xml.exceptions.RuntimeWorkerException

django - 类' __str__ 的 Python 测试覆盖率

java - 如何模拟 "this"

java - 使用 powermock 模拟枚举实例化

java - 找不到taskdef类org.apache.tools.ant.taskdefs.可选.junit.JUnitTask

java - 从 Oracle 的 Prepared Statement 获取结果 sql

c# - 如何在测试用例中防止 'over-testing'? (C#/n单位)

unit-testing - TypeError : Function. prototype.name sham getter 仅在我使用 `--coverage` 运行时调用非功能

java - 我应该使用哪些 Maven Artifact 来导入 PowerMock?