无法使用在Java中链接接口的方法来模拟类

Etc*_*tch 4 java junit mockito

我试图用Mockito模拟一个类,它有一个链接接口的方法.该类被成功模拟,但是当它调用接口时,抛出一个空指针.代码如下所示:

 mock = Mockito.mock(MyProcess.class);
    process = mock.getProcess()
            .getService() //Interface throwing null exception
            .startProcessInstanceByKey("String argument");
Run Code Online (Sandbox Code Playgroud)

我得到了这个解决方案,并尝试按照下面的页面上的示例进行操作,但它不起作用:https://static.javadoc.io/org.mockito/mockito-core/2.13.0/org/mockito/Mockito.html#RETURNS_DEEP_STUBS

Foo mock = mock(Foo.class, RETURNS_DEEP_STUBS);

// note that we're stubbing a chain of methods here: getBar().getName()
when(mock.getBar().getName()).thenReturn("deep");

// note that we're chaining method calls: getBar().getName()
assertEquals("deep", mock.getBar().getName()); 
Run Code Online (Sandbox Code Playgroud)

上面的例子不起作用

Len*_*Boy 6

你也需要嘲笑重调节Service.您需要模拟所有类的外部依赖项,如果不这样做,则可以获得null.

processMock = Mockito.mock(MyProcess.class);
serviceMock= Mockito.mock(Service.class);

Mockito.doReturn(serviceMock).when(processMock).getService();
Mockito.doReturn(<VALUE>).when(serviceMock).startProcessInstanceByKey("String argument");
Run Code Online (Sandbox Code Playgroud)

您需要使用外部值模拟每一步 - 这就是它的工作原理.