概述
mockito 多层调用
Sometimes we want to mock different responses for the consecutive calls on the same method. We can create then*
methods chain with when()
to specify iterator style stubbing in Mockito.
有时,我们想对同一方法的连续调用模拟不同的响应。 我们可以使用when()
创建then*
方法链,以在Mockito中指定迭代器样式存根。
Mockito存根连续呼叫 (Mockito Stubbing Consecutive Calls)
Let’s look at a simple example of mocking exception and return a response when a method is called with same parameters. We will use JUnit 5 assertions to verify the stubbed methods.
让我们看一个模拟异常的简单示例,并在使用相同参数调用方法时返回响应。 我们将使用JUnit 5断言来验证存根方法。
UpdateUtils mockUU = mock(UpdateUtils.class);
when(mockUU.update("Data"))
.thenThrow(new RuntimeException())
.thenReturn("DATA");
assertThrows(RuntimeException.class, () -> mockUU.update("Data"));
assertEquals("DATA", mockUU.update("Data"));
//further calls will return the last mocked output
assertEquals("DATA", mockUU.update("Data"));
Notice that once the mocking chain reaches the end, further calls will return the last mocked response.
注意,一旦模拟链到达末尾,进一步的调用将返回最后的模拟响应。
We can also provide different responses in the thenReturn()
method through varargs.
我们还可以通过varargs在thenReturn()
方法中提供不同的响应。
when(mockUU.update("Emp")).thenReturn("EMP", "EMPLOYEE", "EMP1");
assertEquals("EMP", mockUU.update("Emp"));
assertEquals("EMPLOYEE", mockUU.update("Emp"));
assertEquals("EMP1", mockUU.update("Emp"));
assertEquals("EMP1", mockUU.update("Emp"));
This is useful in the cases where we want to mock different response in multiple executions of the same method. Note that if we define multiple methods stubbing with same arguments, then the last one will override the earlier ones.
在我们要模拟同一方法的多次执行中的不同响应的情况下,这很有用。 请注意,如果我们定义了多个使用相同参数进行存根的方法,则最后一个将覆盖较早的方法。
Mockito迭代器方法存根 (Mockito Iterator Methods Stubbing)
We can use this approach to stub an Iterator. Let’s have a look at a simple example of stubbing iterator methods through consecutive calls.
我们可以使用这种方法对迭代器进行存根。 让我们看一个通过连续调用对迭代器方法进行存根的简单示例。
Iterator<Integer> mockIter = mock(Iterator.class);
when(mockIter.hasNext()).thenReturn(true, true, true, false);
int[] values = new int[] {1,2,3,4};
when(mockIter.next()).thenReturn(values[0], values[1], values[2], values[3]);
int index = 0;
while(mockIter.hasNext()) {
assertTrue(values[index] == mockIter.next());
index++;
}
翻译自: https://www.journaldev.com/21964/mockito-iterator-style-stubbing-consecutive-calls
mockito 多层调用
最后
以上就是追寻豌豆为你收集整理的mockito 多层调用_连续调用的Mockito迭代器样式存根的全部内容,希望文章能够帮你解决mockito 多层调用_连续调用的Mockito迭代器样式存根所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复