Mockito: Eşleştiricileri jeneriklerle listeleyin


Yanıtlar:


279

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)));

16
Not: Bu Mockito 2'de kullanımdan kaldırılmıştır ve Mockito 3'te kaldırılacaktır. Java 8 derleyicisi şimdi türü çıkarabildiği için kullanımdan kaldırılmıştır.
Kip

@artbristol, anySet () ile anyList () ile aynı şekilde çalışıp çalışmadığını biliyor musunuz? Java
8'deyim

1
Kullanmak daha iyi anyListOf. anyListÇalışmasına rağmen bir uyarı verir.
balki

3
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();
çözdüm

14

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 .


4
Matchers.any()çok uygun!
MBach

Eşleştiriciler artık kullanımdan kaldırıldı, burada mockito'dan "ArgumentMatchers kullan. static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter Değişiklikler yapıldı.
Jeff Bowman

5

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());
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.