我想测试 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/