Mockito şunları sunar:
when(mock.process(Matchers.any(List.class)));
Nasıl uyarıyı önlemek için process
bir sürer List<Bar>
yerine?
Mockito şunları sunar:
when(mock.process(Matchers.any(List.class)));
Nasıl uyarıyı önlemek için process
bir 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.
anyListOf
kullanı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 ArgumentMatchers
genel ile kullanarak when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
anyListOf
Yukarı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 instanceof
Foo" 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.Matchers
yukarı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());