来自 AWS SDK 的模拟 ListUsersIterable - JUnit

Mock ListUsersIterable from AWS SDK - JUnit

在我的服务 class 方法中,我有这段代码需要测试

    List<UserType> users = new ArrayList<>();
    ListUsersIterable responses = cognitoclient.listUsersPaginator(ListUsersRequest
                                    .builder()
                                    .userPoolId(userUserPoolId)
                                    .build());
    for (ListUsersResponse response : responses) {
        users.addAll(response.users());
    }

在模拟 cognitoclient.listUsersPaginator() 时,我无法创建 ListUsersIterable 的存根,因为没有 setter 方法可用。

以下是我正在使用的 AWS 依赖项

implementation platform('software.amazon.awssdk:bom:2.15.0')
implementation 'software.amazon.awssdk:cognitoidentityprovider'
implementation 'software.amazon.awssdk:sts'

找到解决方案。

List<AttributeType> userAttributesList = new ArrayList<>();  
userAttributesList.add(AttributeType.builder().name("custom:status").value("active").build());

ListUsersIterable mockUsersIterable = mock(ListUsersIterable.class);        
when(cognitoclient.listUsersPaginator(any(ListUsersRequest.class))).thenReturn(mockUsersIterable);
List<ListUsersResponse> list = new ArrayList<>();
List<UserType> userTypeList = new ArrayList<>();
userTypeList.add(UserType.builder().attributes(userAttributesList).build());
list.add(ListUsersResponse.builder().users(userTypeList).build());
when(mockUsersIterable.iterator()).thenReturn(list.iterator());