Mockito şunları sunar:
when(mock.process(Matchers.any(List.class)));
Nasıl uyarıyı önlemek için processbir sürer List<Bar>yerine?
Mockito şunları sunar:
when(mock.process(Matchers.any(List.class)));
Nasıl uyarıyı önlemek için processbir sürer List<Bar>yerine?
Yanıtlar:
Java 8 ve üstü için kolaydır:
when(mock.process(Matchers.anyList()));
Java 7 ve altı için derleyicinin biraz yardıma ihtiyacı vardır. Kullanım anyListOf(Class<T> clazz):
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf. anyListÇalışmasına rağmen bir uyarı verir.
anyListOfkullanımdan kaldırılmıştır, bu nedenle kullanmamak daha iyidir. Java 8 örneği, aşırı yükleme durumunda çalışmaz, örneğin 2 farklı listeyi kabul eden bir yönteminiz varsa: List<DBEntity>ve List<DTO>bu sorunu ArgumentMatchersgenel ile kullanarak when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
anyListOfYukarıdakilere ek olarak , bu sözdizimini kullanarak jenerikleri her zaman açıkça belirtebilirsiniz:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8, parametrelere dayalı yeni tür çıkarımlarına izin verir, bu nedenle Java 8 kullanıyorsanız bu da işe yarayabilir:
when(mock.process(Matchers.any()));
Unutmayın ne any()de anyList()yazın veya boş çekler dahil olmak üzere herhangi çekleri, geçerli olacaktır. Mockito 2.x, any(Foo.class)"herhangi bir instanceofFoo" olarak değiştirildi , ancak any()yine de null" dahil herhangi bir değer" anlamına gelir .
NOT: Yukarıda bir isim çarpışmasını önlemek için Mockito'nun yeni sürümlerinde ArgumentMatchers'a geçildi org.hamcrest.Matchers. Mockito'nun eski sürümlerinin org.mockito.Matchersyukarıdaki gibi kullanmaya devam etmesi gerekecektir .
Matchers.any()çok uygun!
Java 8'den önce (sürüm 7 veya 6) ArgumentMatchers.anyList adlı yeni yöntemi kullanıyorum:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());