Мокіто: Список списків з дженериками


Відповіді:


279

Для Java 8 і вище це легко:

when(mock.process(Matchers.anyList()));

Для Java 7 і нижче компілятору потрібно трохи допомогти. Використання anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));

16
Примітка: це застаріле в Mockito 2. * і буде видалено в Mockito 3. Застарене, оскільки компілятор Java 8 може зробити висновок про тип зараз.
Кіп

@artbristol чи знаєте ви, чи з anySet () має працювати так само, як і з будь-яким списком ()? Я на Java 8, і попередження кинуто в
EElipse

1
Краще використовувати anyListOf. Незважаючи на те, що anyListпрацює, він видає попередження.
balki

3
anyListOfзастаріла, тому краще НЕ використовувати її. Приклад для Java 8 не працює в разі перевантаження методу, наприклад, якщо у вас є метод, який приймає два різних списки: List<DBEntity>і List<DTO>я вирішив цю проблему, використовуючи ArgumentMatchersgeneric:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

Крім anyListOfвищезазначеного, ви завжди можете чітко вказати генеричні дані, використовуючи цей синтаксис:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

Java 8 нещодавно дозволяє виводити тип на основі параметрів, тож якщо ви використовуєте Java 8, це може також працювати:

when(mock.process(Matchers.any()));

Пам’ятайте, що ні, any()ні anyList()застосовуватимуться жодні перевірки, включаючи перевірки типу чи нуль У Mockito 2.x any(Foo.class)було змінено на «будь-який instanceofFoo», але any()все ще означає «будь-яке значення, включаючи null».

ПРИМІТКА. Вищезгадане перейшло на ArgumentMatchers у новіших версіях Mockito, щоб уникнути зіткнення з іменем org.hamcrest.Matchers. Старіші версії Mockito потрібно буде продовжувати використовувати, org.mockito.Matchersяк зазначено вище.


4
Matchers.any()дуже зручно!
MBach

Matchers тепер застаріло, ось інформація з mockito "Використовуйте ArgumentMatchers. Цей клас зараз застарілий, щоб уникнути зіткнення імені з класом Hamcrest org.hamcrest.Matchers. Цей клас, ймовірно, буде видалено у версії 3.0." static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter Внесені зміни.
Джефф Боуман

5

Перед Java 8 (версії 7 або 6) я використовую новий метод ArgumentMatchers.anyList:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.