Mockito - 每次调用方法时返回模拟对象

时间:2014-03-11 13:22:24

标签: junit mockito

我正在尝试使用Mockito编写一段代码进行单元测试。

每当给定类型的任何类调用某个方法时,我都需要返回一个模拟对象。

我在考虑以下内容,但我似乎无法让它发挥作用。

    Mockito.when(Mockito.any((MyObject.class).myMethod(Mockito.anyString()))).thenReturn(mockedObject); 

基本上每当MyObject的任何实例调用它的myMethod()方法时,我都想返回一个mockedObject。

知道这有可能吗?

1 个答案:

答案 0 :(得分:2)

Mockito没有这样的工作方式。使用Mockito,您将创建一个模拟实例并将其传递给模拟的测试客户端代码。

MyObject mo = mock(MyObject.class);

@Before public void init() {
    // inject mo to the tested code
}

@Test public void ensure_client_code_notify_my_object() {
    // given
    when(mo.myMethod(anyString()))).thenReturn(anotherMock);

    // when
    client.theTestedAPI();

    // then
    // verify(...)....
    // assertThat(...)....

请注意,返回模拟的模拟通常不是关于生产代码设计的好兆头。它显示了耦合的迹象,特别是它意味着这个代码打破了 Demeter 的定律。

为了改善关注点分离并避免违反Demeter 的法则,你一定要按照告诉,不要问原则。

本书非常好读Growing Object Oriented Software Guided by Tests

HTH