如何在单元测试时使用jmockit将空字符串传递给私有方法?

joh*_*ohn 7 java junit jmockit

下面是我DataTap班上的私有方法,我正在尝试使用jmockit对这个私有方法进行junit测试 -

private void parseResponse(String response) throws Exception {
    if (response != null) {
        // some code
    }
}
Run Code Online (Sandbox Code Playgroud)

所以下面是我写的junit测试但是对于null情况,它会在junit测试本身上以某种方式抛出NPE.

DataTap tap = new DataTap();
Deencapsulation.invoke(tap, "parseResponse", "hello");

// this line throws NPE
Deencapsulation.invoke(tap, "parseResponse", null);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是 - 作为junit测试的一部分,我有什么方法可以使用JMOCKIT 传递null stringparseResponse方法吗?

这就是我在这条线上看到的 -

类型为null的参数应显式转换为Object [],以便从Deencapsulation类型调用varargs方法invoke(Object,String,Object ...).也可以将其转换为Object以进行varargs调用

Mak*_*oto 15

快速浏览文档表明,您尝试使用该签名进行的操作是不可能的:

...如果需要传递null值,则必须传递参数类型的Class对象

如果是这种情况,那么传入Class对象以及实例.

Deencapsulation.invoke(tap, "parseResponse", String.class);
Run Code Online (Sandbox Code Playgroud)

  • 传递Class对象,而不是传递null,而不是传递给它:Deencapsulation.invoke(tap,“ parseResponse”,String.class)。由于方法重载,JMockit需要知道每个参数的类型,以便它可以通过反射找到所需的方法。这种类型只能通过非空参数*或*通过在调用invoke(...)中显式传递它来确定。 (2认同)