#java #testing #junit #mockito
#java #тестирование #junit #mockito
Вопрос:
Я пытался захватить некоторые типы, и я не могу найти чистое решение. Я получил это:
@Captor
private ArgumentCaptor<T extends DTO> targetMapperCaptor;
Я использую этот Captor против mapper, используя 2 типа параметров; экземпляр или clazz.
Как объявлено, захватываются только те объекты, которые расширяют DTO, для захвата классов:
@Captor
private ArgumentCaptor<Class> targetMapperCaptor;
Приводя пример, используя этот код в реализации:
mock.map(MyObject.class);
mock.map(new MyObject());
И наличие этого в тесте:
when(mock, times(2)).map(targetMapperCaptor.capture());
Всегда будет выдавать TooLittleActualInvocations (хотел 2, но получил 1). Если мы удалим times(2), внутри targetMapperCaptor.getAllValues() останется только значение, соответствующее типу.
Есть какой-либо способ объявить ArgumentCaptor для захвата любого параметра?
Я также безуспешно пытался:
private ArgumentCaptor<?> targetMapperCaptor;
private ArgumentCaptor targetMapperCaptor;
Комментарии:
1. Я бы сказал, что ваш подход с использованием общего captor неверен. Используйте два конкретных captors и убедитесь, что соответствующая
map
перегрузка была вызвана ровно один раз (не два).2. Звучит жизнеспособно, я хотел сделать это только в одном экземпляре ArgumentCaptor, используя этот способ, я должен выполнить больше проверок, но это более исчерпывающее использование вашего предложения, оно должно проверить, вызывает ли оно метод класса или метод экземпляра.
3. Большое спасибо @Tom
4. Что вы имеете в виду, говоря «он должен проверить, вызывает ли он метод класса или метод экземпляра». . Что такое «это»? Когда вы имеете в виду свой фреймворк-макет, тогда «да», но это не имеет большого значения. Более важно, чтобы ваши тесты были четкими и понятными. Наличие двух конкретных captors с четкими типами также делает ваш тест более понятным для чтения и понимания.
5. Полностью согласен. Извините, «Это» — это сам тест. Я хотел сказать, что тест является более исчерпывающим, используя способ, который вы предлагаете. Проверка того, что был выполнен один вызов метода класса и один вызов был выполнен для метода экземпляра.