我正在使用mockito 1.9.5。 我有以下代碼:嘲笑一種使用mockito返回泛型與通配符的方法
public class ClassA {
public List<? extends MyInterface> getMyInterfaces() {
return null;
}
public static void testMock() {
List<MyInterface> interfaces = new ArrayList<>();
ClassA classAMock = mock(ClassA.class);
when(classAMock.getMyInterfaces()).thenReturn(interfaces);
}
我得到了thenReturn(interfaces)
編譯錯誤說:
"The method thenReturn(List<capture#1-of ? extends MyInterface>) in the type
OngoingStubbing<List<capture#1-of ? extends MyInterface>> is not applicable for the arguments
(List<MyInterface>)"
然而,當我使用的的Mockito的thenAnswer
方法,我沒有得到這個錯誤。誰能告訴我發生了什麼事?爲什麼我在使用thenReturn
方法時遇到錯誤? 當第三方提供ClassA
並且無法修改時,是否有任何其他方法可以解決此問題?
您不應在'getMyInterfaces'的返回類型中使用通配符。這不是一個好習慣,因爲那個API的客戶必須處理一個他們不知道的通配符。 – SpaceTrucker 2013-04-11 07:35:26
我不控制這個API。它由第三方提供。 – user1504992 2013-04-11 07:59:46
@SpaceTrucker我認爲有一個返回類型像「List <?擴展MyInterface>'是一件非常明智的事情。這意味着你(作爲方法調用者)可以將'MyInterface'對象從列表中取出,但不能在其中放入任何東西。 – 2014-11-17 10:13:12