Метод испытания блока со ссылкой методы в качестве параметра

голоса
0

У меня есть метод, который принимает в качестве параметра объекта и ссылку на этот метод объект, чтобы собрать целые числа в коллекции от этого объекта. Код работает нормально, но я не могу модульного тестирования с 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);

Это прекрасно работает. Я предполагаю, что мне нужно, чтобы передать что-то другое, то ссылку метод в качестве параметра для моего первого теста, но я был несчастный в поисках кого-то еще происходит в этом случае, даже если это кажется довольно распространенным явлением.

Задан 07/11/2018 в 19:54
источник пользователем
На других языках...                            


1 ответов

голоса
2

С Mockito, вам необходимо убедиться , что метод вы передаете в ваше whenзаявление одно и то же , что передается в фактическом методе. Основываясь на вашем примере, вы используете UserCredentials::getAccountIdи UserCredentials::accountId(возможно , опечатка).

Вы можете рассмотреть возможность использования различных matchers аргументов вместо:

import static org.mockito.ArgumentMatchers.*;

when(userCredentialsUtil.userCredentialsGetter(eq(userCredentials), any()).thenReturn(accountIds);
Ответил 07/11/2018 в 20:02
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more