Вы также можете использовать для этого нетипичный безопасный метод doReturn ,
@Test
public void testMockitoWithGenerics()
{
DummyClass dummyClass = Mockito.mock(DummyClass.class);
List<? extends Number> someList = new ArrayList<Integer>();
Mockito.doReturn(someList).when(dummyClass).dummyMethod();
Assert.assertEquals(someList, dummyClass.dummyMethod());
}
как обсуждено в группе Google Mockito.
Хотя это проще, чем thenAnswer
, еще раз обратите внимание, что это небезопасно. Если вы беспокоитесь о безопасности типов, ответ на Millhouse правильный.
Дополнительные детали
Для ясности, вот наблюдаемая ошибка компилятора,
The method thenReturn(List<capture#1-of ? extends Number>) in the type OngoingStubbing<List<capture#1-of ? extends Number>> is not applicable for the arguments (List<capture#2-of ? extends Number>)
Я полагаю, что компилятор назначил первый тип подстановочного знака во время вызова when
, а затем не может подтвердить, что второй тип подстановочного знака в вызове thenReturn
совпадает.
Похоже, что thenAnswer
не сталкивается с этой проблемой, потому что он принимает тип подстановочного знака, в то время как thenReturn
принимает тип не подстановочный, который должен быть захвачен. Из Mockito в постоянном режиме ,
OngoingStubbing<T> thenAnswer(Answer<?> answer);
OngoingStubbing<T> thenReturn(T value);