Mockito oferuje:
when(mock.process(Matchers.any(List.class)));
Jak uniknąć ostrzeżenia, jeśli zamiast tego processbierze List<Bar>?
Mockito oferuje:
when(mock.process(Matchers.any(List.class)));
Jak uniknąć ostrzeżenia, jeśli zamiast tego processbierze List<Bar>?
Odpowiedzi:
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 że anyListdziała, emituje ostrzeżenie.
anyListOfjest 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>i List<DTO>rozwiązałem ten problem, używając ArgumentMatchersz generic:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Oprócz anyListOfpowyższego zawsze możesz jawnie określić typy ogólne, używając następującej składni:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
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ć:
when(mock.process(Matchers.any()));
Pamiętaj, że ani any()ani nie anyList()będą stosować żadnych kontroli, w tym kontroli typu lub null. W Mockito 2.x any(Foo.class)zostało zmienione na „dowolne instanceofFoo”, ale any()nadal oznacza „dowolną wartość, w tym null”.
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.Matchersjak powyżej.
Matchers.any()jest bardzo wygodny!
Przed Java 8 (wersje 7 lub 6) używam nowej metody ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());