以方法参考为参数的单元测试方法



我有一个方法,它将一个对象和对该对象的方法引用作为参数,以从该对象收集集合中的整数。代码运行良好,但我无法在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);

这很好用。我猜我需要传递其他东西,然后将方法引用作为第一次测试的参数,但我很不幸发现有其他人进入了这种情况,尽管这似乎很常见。

使用mockito,您需要确保传递到when语句中的方法与实际方法传递的方法相同。根据您的示例,您使用的是UserCredentials::getAccountIdUserCredentials::accountId(可能是拼写错误(。

您可能需要考虑使用不同的参数匹配器:

import static org.mockito.ArgumentMatchers.*;
when(userCredentialsUtil.userCredentialsGetter(eq(userCredentials), any()).thenReturn(accountIds);

相关内容

  • 没有找到相关文章

最新更新