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

标签 java mockito

我想测试 Spring Boot Rest 应用程序的 http 层。为此,模拟服务来应答 Controller 的调用。

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

其中之一是:

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())

最佳答案

您可以存储方法引用,然后迭代它们

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());
}

此测试可以运行并通过。

关于java - 如何设置 Mockito 模拟以对多个不同的方法调用使用相同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54219402/

相关文章:

java - 使用mockito在getObjectValue()上出现空指针异常

Java容器约束问题

java - 从数据库加载多个(很多)对象,将其保存在ehcache中并使用主键查询

java - 无法解析值 'version.v1' 中的占位符 "/api/${version.v1}"

java - 是否可以只运行一个测试类(利用 PowerMock 和 Mockito)?

java - Play 请求中的模拟查询字符串

java - 如何使用 Powermockito 以便跳过私有(private)无效方法

java - 如何在 Android Google Maps v2 中创建带有传感器方位的位置箭头标记?

java - playframework owasp 前 10 名

java - 在 DAO 实现类中实现默认的 JPA findAll 方法