java - 无法使用在 Java 中链接接口(interface)的方法模拟类

标签 java junit mockito

我正在尝试使用 Mockito 模拟一个类,该类具有链接接口(interface)的方法。该类被成功模拟,但是当它调用接口(interface)时抛出一个空指针。代码如下所示:

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

我得到了这个解决方案并尝试按照下面页面上的示例进行操作,但它不起作用: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()); 

上面的例子不起作用

最佳答案

您还需要模拟重新调整的 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");

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

关于java - 无法使用在 Java 中链接接口(interface)的方法模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49538902/

相关文章:

java - 关于Integer.toString(char)的返回值

java - 单元测试 : Call @PostConstruct after defining mocked behaviour

java - 当我使用 @JsonView 时,为什么 @InjectMocks Controller 的响应会被 Mockito 变成空?

java - 使用mockito-inline 模拟特定方法不完整的类

java - 如何从另一个类的方法更新变量

java - 如何将 Google Map API v2 包含到 fragment 中?

java - 不同OS环境下对JUnit测试的不同期望

java - JUnit 测试 Spring @Async void 服务方法

java - 如何模拟 jdbcTemplate.query(sqlQuery, new Object[] {id, name}, new Mapper())

java - EclipseLink MOXy OSGi bundle 的问题