Метод модульного тестирования со ссылкой на метод в качестве параметра - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть метод, который принимает в качестве параметра объект и ссылку на метод для этого объекта, чтобы собрать целые числа в коллекции из этого объекта. Код работает нормально, но я не могу выполнить модульное тестирование с помощью метода mockito для метода when ().

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);

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

1 Ответ

0 голосов
/ 07 ноября 2018

При использовании mockito вам необходимо убедиться, что метод, который вы передаете в оператор when, совпадает с методом, переданным самим методом. Исходя из вашего примера, вы используете UserCredentials::getAccountId и UserCredentials::accountId (возможно, опечатку).

Возможно, вы захотите использовать вместо этого другие сопоставители аргументов:

import static org.mockito.ArgumentMatchers.*;

when(userCredentialsUtil.userCredentialsGetter(eq(userCredentials), any()).thenReturn(accountIds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...