Mockito.any() для <t>

Я хочу высмеять метод с сигнатурой как:

    public <T> T documentToPojo(Document mongoDoc, Class<T> clazz)

Я издеваюсь над ним, как показано ниже:

    Mockito.when(mongoUtil.documentToPojo(Mockito.any(Document.class), Mockito.any(WorkItemDTO.class)))

Но я получаю ошибку как:

Метод documentToPojo(Document, Class<T>) в типе MongoUtil не применим для аргументов (Document, WorkItemDTO)

Есть ли способ в Mockito, который поможет мне издеваться над T?

Ответ 1

Обратите внимание, что documentToPojo воспринимает класс как второй аргумент. any(Foo.class) возвращает аргумент типа Foo, а не типа Class<Foo>, тогда как eq(WorkItemDTO.class) должен возвращать Class<WorkItemDTO> как ожидалось. Я бы сделал это так:

when(mongoUtil.documentToPojo(
    Mockito.any(Document.class),
    Mockito.eq(WorkItemDTO.class))).thenReturn(...);

Ответ 2

Вы можете сопоставить общий аргумент Class<T> используя просто any( Class.class ), например:

Mockito.when( mongoUtil.documentToPojo( Mockito.any( Document.class ),
                                        Mockito.any( Class.class ) ) );

Ура,

Ответ 3

Вы можете сделать это, используя ArgumentMatchers.any() с типом, например:

Mockito.when(
    mongoUtil.documentToPojo(
        Mockito.any(Document.class),
        ArgumentMatchers.<Class<WorkItemDTO>>any()
    )
).thenReturn(...);