Mockito让模拟从现有模拟中继承存根

时间:2019-04-10 08:02:17

标签: java unit-testing mocking mockito

我有来自同一类的两个模拟对象,唯一的区别是两个对象之间的状态不同。在测试状态差异之前,我需要使用一些方法,这意味着我必须对两个对象都这样做,这对我而言似乎效率不高。

我在Java上进行了单元测试的以下设置:

@Mock
private CuratorFramework zkClient;
@Mock
private CuratorFramework zkClientNotStarted;

@BeforeEach
void beforeEach() {

    when(zkClient.getState()).thenReturn(CuratorFrameworkState.STARTED);
    when(zkClient.checkExists()).thenReturn(existsBuilder);
    when(zkClient.exampleMethod()).thenReturn(exampleObject);
    ...

    when(zkClientNotStarted.getState()).thenReturn(CuratorFrameworkState.LATENT);
    when(zkClientNotStarted.checkExists()).thenReturn(existsBuilder);
    when(zkClientNotStarted.exampleMethod()).thenReturn(exampleObject);
    ...
}

这使我误解了,因为有很多重复的代码,并且找不到类似于以下内容的东西:

@Mock
private CuratorFramework zkClient;
@Mock
private CuratorFramework zkClientNotStarted;    
@Mock
private CuratorFramework zkClientBase;

@BeforeEach
void beforeEach() {

    when(zkClientBase.checkExists()).thenReturn(existsBuilder);
    when(zkClientBase.checkExists()).thenReturn(existsBuilder);
    when(zkClientBase.exampleMethod()).thenReturn(exampleObject);
    ...

    zkClient.inheritStubs(zkClientBase)
    when(zkClient.getState()).thenReturn(CuratorFrameworkState.STARTED);

    zkClientNotStarted.inheritStubs(zkClientBase);
    when(zkClientNotStarted.getState()).thenReturn(CuratorFrameworkState.LATENT);

}

是否可以将模拟克隆/复制到继承已初始化存根的新模拟中?还是Mockito框架的这种错误用例?

我发现的唯一类似问题是:Mockito: Mock object based on another 这个问题是在5年前提出的。我希望那段时间有所改变。

0 个答案:

没有答案