Mockito oferuje:
when(mock.process(Matchers.any(List.class)));
Jak uniknąć ostrzeżenia, jeśli zamiast tego process
bierze List<Bar>
?
W przypadku języka Java 8 i nowszych jest to łatwe:
when(mock.process(Matchers.anyList()));
W przypadku języka Java 7 i starszych kompilator potrzebuje trochę pomocy. Zastosowanie anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
. Mimo żeanyList
działa, emituje ostrzeżenie.anyListOf
jest przestarzały, więc lepiej go NIE używać. Przykład dla Java 8 nie działa w przypadku przeciążenia metody, na przykład jeśli masz metodę akceptującą 2 różne listy:List<DBEntity>
iList<DTO>
rozwiązałem ten problem, używającArgumentMatchers
z generic:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Oprócz
anyListOf
powyższego zawsze możesz jawnie określić typy ogólne, używając następującej składni:Java 8 nowo umożliwia wnioskowanie o typie na podstawie parametrów, więc jeśli używasz Java 8, może to również działać:
Pamiętaj, że ani
any()
ani nieanyList()
będą stosować żadnych kontroli, w tym kontroli typu lub null. W Mockito 2.xany(Foo.class)
zostało zmienione na „dowolneinstanceof
Foo”, aleany()
nadal oznacza „dowolną wartość, w tymnull
”.UWAGA: Powyższe zostało przełączone na ArgumentMatchers w nowszych wersjach Mockito, aby uniknąć kolizji nazw z
org.hamcrest.Matchers
. Starsze wersje Mockito będą musiały nadal używaćorg.mockito.Matchers
jak powyżej.źródło
Matchers.any()
jest bardzo wygodny!Przed Java 8 (wersje 7 lub 6) używam nowej metody ArgumentMatchers.anyList:
źródło