隨着我的Mockito驗證可以做到以下幾點:的Mockito:與泛型參數
verify(someService).process(any(Person.class));
但我怎麼寫這個,如果process
需要Collection<Person>
呢?無法弄清楚如何正確編寫它。只是得到語法錯誤...
隨着我的Mockito驗證可以做到以下幾點:的Mockito:與泛型參數
verify(someService).process(any(Person.class));
但我怎麼寫這個,如果process
需要Collection<Person>
呢?無法弄清楚如何正確編寫它。只是得到語法錯誤...
嘗試:
verify(someService).process(Matchers.<Collection<Person>>any());
事實上,自動的IntelliJ當我輸入any()
...可惜你不能在這種情況下使用靜態導入建議此修復程序。
由於類型擦除你不能表達。即使你可以用代碼表達它,Mockito也沒有機會在運行時檢查它。你可以創建一個接口,如
interface PersonCollection extends Collection<Person> { /* nothing */ }
改爲在整個代碼中使用它。
編輯:我錯了,Mockito有anyCollectionOf(..)這就是你想要的。
實際上,如果API接受它,它*可以用「類型文字」對象表示:'any(new TypeLiteral
@Rogerio:你說的對,現在看來Mockito的確支持這一點。有一段時間沒有使用它... – Waldheinz 2011-05-30 11:56:15
嘗試:
verify(someService).process(anyCollectionOf(Person.class));
由於版本1.8的Mockito介紹
public static <T> Collection<T> anyCollectionOf(Class<T> clazz);
對於其他需要它的人來說,除了anyCollectionOf(),還有一個anyListOf(),請參閱:http://stackoverflow.com/a/10512526/908677 – 2016-08-16 18:47:34
anyCollectionOf(類
,如果您使用的是自己的方法,你甚至可以使用靜態導入:
private Collection<Person> anyPersonCollection() {
return any();
}
然後你可以使用
verify(someService).process(anyPersonCollection());
這似乎工作! – Svish 2011-05-30 11:55:31
感謝它的工作......但上帝看起來很可怕,必須有一個更好的方式來對... – 2013-01-10 19:01:25
豎起大拇指上唯一的解決方案,回答問題的陳述,而不是針對匹配容器的特殊情況。 – 2013-11-15 04:07:01