使用mockito进行测试时,超类方法的构造函数中的NullPointerException

时间:2017-05-08 05:34:37

标签: java android mockito robolectric

我有一个超级班:

public class B extends A{
    public B(Context context){
        super(context);
    }
}

和B级继承它:

B b = new B(context)

在我使用Robolectric和Mockito的测试类中,当我像这样实例化B类时:@Mock Context context; @Before public void setup() { initMocks(this); B b = new B(context); }

我在A类的构造函数的超级方法中得到了nullpointerexception。我做错了吗?

这是测试代码:

     "dependsOn": [
            "[resourceId('Microsoft.HDInsight/clusters/applications', parameters('clusterName'), parameters('TestEdgenodeName1'))]"
        ],

1 个答案:

答案 0 :(得分:2)

简单回答:这并不容易。

您向我们隐藏的异常堆栈跟踪会告诉您/我们这些NPE发生在某些 base Android代码中。事情是:您正在将 context 对象传递给Fragment构造函数。

猜猜:片段代码然后启动使用该上下文对象。它对该对象进行了一系列调用,以便检索其他对象,然后然后对这些对象进行调用。

现在,您只模拟了一个Context对象。默认情况下,任何应该返回值的调用都将返回 null 。 Mockito对你所嘲笑的课程一无所知。因此,当您希望某个调用返回的值不是null时,您必须指定该行为。

所以,“简短”的答案是:你必须准备那个模拟对象才能像这样使用。答案很长......已经给出了;你需要深入研究它的details

除此之外;你可以看看另一个question处理完全相同的问题。