Mockito ArgumentCaptor, по-видимому, подрывает генерики, как показано в следующем псевдокоде.
public Class SomeClass{
public void someMethod(Object msg){
// do whatever
}
}
Выполняется модульный тест, в который передается макет SomeClass.На макете выполняются следующие вызовы методов.
someClass.someMethod(instanceA)
someClass.someMethod(instanceB) // where A & B are different classes
Затем модульный тест выполняет следующее>
ArgumentCaptor<A> argumentCaptorA = ArgumentCaptor.forClass(A.class);
ArgumentCaptor<B> argumentCaptorB = ArgumentCaptor.forClass(B.class);
Mockito.verify(someClass, times(2)).someMethod(argumentCaptorA.capture());
Mockito.verify(someClass, times(2)).someMethod(argumentCaptorB.capture());
Вот проблема>
List<A> listA = argumentCaptorA.getAllValues();
List<B> listB = argumentCaptorB.getAllValues();
ОбаlistA & listB имеют размер 2, содержащий как instanceA, так и instanceB.
Почему это?Это потому, что во время выполнения аргументы instanceA и instanceB становятся объектами при передаче в someClass и что Mockito неправильно проверяет тип объекта на соответствие типам ArgumentCaptors?
Я ожидал, что дженерики обеспечат, чтобы listA содержал instanceA, а listB содержал instanceB.