我有一个以对象为参数的方法和对该对象的方法引用,以从该对象收集集合中的整数。该代码可以正常工作,但是我无法在when()方法上使用mockito进行单元测试。
public class UserCredentials {
private Integer accountId;
private Integer customerNameId;
}
public class UserCredentialsUtil {
public List<Integer> userCredentialsGetter(
final List<UserCredentials> userCredentials,
final Function<UserCredentials, Integer> func) {
return userCredentials.stream().map(func).collect(Collectors.toList());
}
}
我的单元测试基本上向我返回了一个空列表。
@Mock
private UserCredentialsUtil userCredentialsUtil;
final List<Integer> accountIds = Arrays.asList(1, 2, 3);
when(
this.userCredentialsUtil.userCredentialsGetter(
userCredentials,
UserCredentials::getAccountId)).thenReturn(accountIds);
我知道这对我的设置不是问题,因为如果我将UserCredentialsGetter更改为
public List<Integer> userCredentialsGetter(
final List<UserCredentials> userCredentials) {
return userCredentials.stream().map(UserCredentials::getAccountId).collect(Collectors.toList());
}
测试方法。
when(
this.userCredentialsUtil.userCredentialsGetter(
userCredentials)).thenReturn(accountIds);
这很好。我猜我需要传递其他内容,然后将方法引用作为参数进行第一次测试,但是我很不幸地发现有人参与这种情况,即使这种情况看起来很普遍。
答案 0 :(得分:2)
使用嘲笑,您需要确保传递到when
语句中的方法与实际方法传递的方法相同。根据您的示例,您正在使用UserCredentials::getAccountId
和UserCredentials::accountId
(可能是错字)。
您可能要考虑使用其他参数匹配器:
import static org.mockito.ArgumentMatchers.*;
when(userCredentialsUtil.userCredentialsGetter(eq(userCredentials), any()).thenReturn(accountIds);