का उपयोग करके वाइल्डकार्ड के साथ जेनेरिक लौटने वाली एक विधि का मज़ाक उड़ाते हुए मैं मॉकिटो 1.9.5 का उपयोग कर रहा हूं।मॉकिटो
"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
विधि का उपयोग करें, मैं नहीं त्रुटि मिलती है:
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)
के लिए एक संकलन त्रुटि कह मिलती है: मैं निम्नलिखित कोड है। क्या कोई मुझे बता सकता है कि क्या हो रहा है? जब मैं thenReturn
विधि का उपयोग करता हूं तो मुझे त्रुटि क्यों मिलती है? क्या इस समस्या को हल करने का कोई अन्य तरीका है जब ClassA
किसी तृतीय पक्ष द्वारा प्रदान किया जाता है और संशोधित नहीं किया जा सकता है?
आपके पास 'getMyInterfaces' की वापसी प्रकार में वाइल्डकार्ड नहीं होना चाहिए। यह एक अच्छा अभ्यास नहीं है, क्योंकि उस एपीआई के ग्राहकों को वाइल्डकार्ड से निपटना है जहां उन्हें कुछ भी पता नहीं है। – SpaceTrucker
मैं इस एपीआई को नियंत्रित नहीं करता हूं। यह एक तीसरी पार्टी द्वारा दिया जाता है। – user1504992
@ स्पेसट्रकर मुझे लगता है कि 'सूची <जैसे वापसी प्रकार है? MyInterface बढ़ाता है> 'करने के लिए एक पूरी तरह समझदार बात है। इसका मतलब है कि आप (विधि कॉलर के रूप में) सूची में से 'MyInterface' ऑब्जेक्ट्स प्राप्त कर सकते हैं, लेकिन आप इसमें कुछ भी नहीं डाल सकते हैं। –