如何设置Mockito模拟以对多个不同的方法调用使用相同的答案

时间:2019-01-16 14:37:06

标签: java mockito

我想测试Spring Boot Rest应用程序的http层。为此,该服务嘲笑了控制器的呼叫。

由于我有很多方法(例如findBy ...)期望服务返回一个列表,所以我想立即存根所有调用,并且所有这些都应由相同的答案回答。

其中之一是:

when(someService.getAll()).thenReturn(listOfSomeElements);

在Mockito中是否可以为多个都接受相同答案的呼叫设置相同答案?像

when(someService.getAll(), someService.getSome(), someService.getFew()).thenReturn(listOfSomeElements);

doReturn(listOfSomeElements).when(someService.getAll()).when( someService.getSome()).when(someService.getFew())

1 个答案:

答案 0 :(得分:2)

您可以存储方法引用,然后对其进行迭代

interface Foo {
    String foo();
}

interface Bar {
    String bar();
}

@Mock
Foo mockFoo;
@Mock
Bar mockBar;

@Test
public void someTest()
{
    List<Supplier<String>> suppliers = Arrays.asList(mockFoo::foo, mockBar::bar);
    for (Supplier<String> supplier : suppliers)
    {
        when(supplier.get()).thenReturn("Blah");
    }

    assertEquals("Blah", mockFoo.foo());
    assertEquals("Blah", mockBar.bar());
}

此测试可运行并通过。