Как передать параметр методу издеваемого класса? - PullRequest
0 голосов
/ 19 июня 2020

Я использую mockito для тестирования приложения mu jdk11-springboot.

В моем приложении есть класс ClientRepository и метод findById, который принимает параметр типа UUID.

Итак, метод выглядит так:

 public String findById(UUID id)

Теперь я издевался над классом для тестирования как:

@MockBean
private ClientRepository clientRepo;

Теперь я пытаюсь выяснить, как передать здесь параметр UUID:

 Mockito.when(clientRepo.findById(UUID id))
            .thenReturn(dslContext.selectFrom(CLIENT).where(CLIENT.ID.eq(UUID.fromString("3e064b19-ef76-4aea-bf82-e9d8d01daf1c"))).fetch());

Кто может помочь?

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Непосредственная передача значения, для которого ожидается возврат макета, также должна работать.

Mockito.when(clientRepo.findById(<expected UUID>)
    .thenReturn(dslContext.selectFrom(CLIENT).where(CLIENT.ID.eq(UUID.fromString("3e064b19-ef76-4aea-bf82-e9d8d01daf1c"))).fetch());
1 голос
/ 19 июня 2020

Вы можете использовать следующую конструкцию:

UUID expected = ...;
Mockito.when(clientRepo.findById(Mockito.eq(expected))).thenReturn(...);

Это может быть хорошим решением, если ожидаемый UUID не тот экземпляр, который вы настраиваете в тесте.

Еще один момент для подумайте:

Кажется, вы используете JOOQ, но у вас есть фиктивный bean-компонент для репозитория, что означает, что вы, вероятно, тестируете какой-то сервис (уровень бизнес-логики c). В этом случае, возможно, вам вообще не нужно работать с базой данных, просто создайте строку и верните в thenReturn часть макетной конфигурации

1 голос
/ 19 июня 2020
 Mockito.when(clientRepo.findById(Mockito.any(UUID.class))
            .thenReturn(dslContext.selectFrom(CLIENT).where(CLIENT.ID.eq(UUID.fromString("3e064b19-ef76-4aea-bf82-e9d8d01daf1c"))).fetch());

Используйте вместо него Mockito.eq("your-uuid-goes-here"), если ваш макет должен реагировать только на указанные c значения.

...