Mockito“ thenReturn” vs Mockito“ thenAnswer”
时间: 2023-10-08 17:05:53 浏览: 146
Mockito中的thenReturn()和thenAnswer()方法都用于模拟方法的返回值,但它们的使用方法略有不同。
thenReturn()方法是用于模拟方法的返回值,它可以模拟任何类型的返回值,包括null值。例如,当我们模拟一个方法时,可以使用thenReturn()方法指定其返回值,如下所示:
```java
List<String> mockedList = mock(List.class);
when(mockedList.get(0)).thenReturn("first");
```
上述代码模拟了一个List对象,当调用其get(0)方法时,返回值为"first"。这里thenReturn()方法返回了一个字符串类型的值。
与之相比,thenAnswer()方法可以更加灵活地模拟方法的返回值,它可以使用自定义的Answer对象进行返回值的模拟。例如,当我们需要根据方法的参数来动态计算返回值时,可以使用thenAnswer()方法。下面是一个示例:
```java
List<String> mockedList = mock(List.class);
when(mockedList.get(anyInt())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
return "called with arguments: " + args[0];
}
});
```
上述代码中,我们通过thenAnswer()方法指定了一个Answer对象,该对象会根据方法的参数计算出返回值,并返回一个字符串类型的结果。
总的来说,thenReturn()方法用于简单的返回值模拟,而thenAnswer()方法则更加灵活,可以根据方法的参数动态计算返回值。
阅读全文