Тестирование Mockito для функции с 2 аргументами

#java #unit-testing #mockito #java-stream

#java #модульное тестирование #mockito #java-поток

Вопрос:

У меня есть следующий поток:

 Collection<FieldsMapperMetadata> fieldsMapperMetadataCollection =
            Optional.ofNullable(typesMapperDefinition.getFieldMappersDefinitions()).orElse(Collections.emptyList())
                    .stream()
                    .map(fieldsMapperDefinition -> fieldsMapperMetadataFactory.apply(typesMapperDefinition, fieldsMapperDefinition))
                    .collect(Collectors.toList());
  

И я пытаюсь протестировать его с помощью mockito, но у меня возникла проблема с этой частью

 fieldsMapperDefinition -> fieldsMapperMetadataFactory.apply(typesMapperDefinition, fieldsMapperDefinition)
  

вот сигнатура функции

 private BiFunction<TypesMapperDefinition, FieldsMapperDefinition, FieldsMapperMetadata> fieldsMapperMetadataFactory;
  

и я пытался сделать что-то вроде этого:

  Mockito.when(fieldsMapperMetadataFactory.apply(Mockito.eq(typesMapperDefinition1,fieldsMapperDefinition1)).thenReturn(fieldsMapperMetadata1);
  

но похоже, что Mockito.eq — неправильный подход…
Любая помощь по этому вопросу будет оценена

Ответ №1:

Вы передаете только один аргумент в метод apply, вы должны вызвать eq() дважды:

 Mockito.when(fieldsMapperMetadataFactory
         .apply(Mockito.eq(typesMapperDefinition1), Mockito.eq(fieldsMapperDefinition1))
       .thenReturn(fieldsMapperMetadata1);