Вопрос по java, generics, matcher, warnings, mockito – Mockito: список совпадений с дженериками

146

Mockito предлагает:

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

Как избежать предупреждения, еслиprocess занимаетList<Bar> вместо?

Ваш Ответ

3   ответа
12

В дополнение к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) было изменено на "любой"instanceof Foo & quot ;, ноany() означает "любое значение, включаяnull& Quot ;.

ПРИМЕЧАНИЕ. Вышеуказанное переключилось наArgumentMatchers в более новых версиях Mockito, чтобы избежать конфликта имен сorg.hamcrest.Matchers, Старые версии Mockito нужно будет продолжать использоватьorg.mockito.Matchers как указано выше.

@oddmeter Изменения сделаны.
Matchers.any() это очень удобно!
Matchers теперь устарели, вот информация от mockito. Используйте ArgumentMatchers. Этот класс теперь не рекомендуется, чтобы избежать конфликта имен с классом Hamcrest org.hamcrest.Matchers. Этот класс, скорее всего, будет удален в версии 3.0. & Quot;static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
@JeffBowman нет пота, просто оставляю записку для других :)
246

Для Java 8 и выше это просто:

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

Для Java 7 и ниже компилятору нужна небольшая помощь. использованиеanyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));
@Kip спасибо. Я обновил ответ
@artbristol Знаете ли вы, если с anySet () должен работать так же, как anyList ()? Я нахожусь в Java 8, и в Eclipse IDE выдается предупреждение
Лучше использоватьanyListOf, Даже еслиanyList работает, выдает предупреждение.
Примечание: это устарело в Mockito 2. * и будет удалено в Mockito 3. Устаревшее, потому что компилятор Java 8 теперь может определять тип.
0

До Java 8 (версии 7 или 6) я использовал новый метод ArgumentMatchers.anyList:

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());

Похожие вопросы