2012-05-11 14 views
15

में विस्तारित करता है क्या हस्ताक्षर चेतावनी के बिना Set<? extends Car> getCars() हस्ताक्षर के साथ नकली (मॉकिटो के साथ) विधि बनाना संभव है? मैं करने की कोशिश की:जेनेरिक के साथ नकली विधि और रिटर्न प्रकार

XXX cars = xxx; 
when(owner.getCars()).thenReturn(cars); 

लेकिन कोई बात नहीं मैं कैसे घोषित cars मैं alway एक संकलन त्रुटि मिलती है। , उदा, जब मैं इस

Set<? extends Car> cars = xxx 

की तरह घोषित मैं मानक सामान्य/mockito संकलन त्रुटि

The method thenReturn(Set<capture#1-of ? extends Car>) in the type OngoingStubbing<Set<capture#1-of ? extends Car>> is not applicable for the arguments (Set<capture#2-of ? extends Car>) 
+0

क्या संकलन त्रुटि मिल रहा है की जरूरत है, आप कॉपी कर सकते हैं/पेस्ट करें? – miks

+1

चेतावनी दमन, संकलन विफलता, और अपवाद सभी अलग-अलग चीजें हैं ... मुझे लगता है कि आप उन्हें यहां भ्रमित कर सकते हैं। –

+0

मैंने सबकुछ ठीक से समझाने की कोशिश की। तो एक बार और स्पष्ट होना चाहिए। मैं अपना कोड संकलित करना चाहता हूं। मैं भी चाहता हूं कि उस कोड में कोई चेतावनी नहीं है और कोई '@ SupressWarning' नहीं है। मैंने कभी अपवादों के बारे में कुछ भी नहीं बताया है। उम्मीद है कि – piotrek

उत्तर

30

उपयोग doReturn-जब वैकल्पिक छोटा करते वाक्य रचना मिलता है। परीक्षण के अंतर्गत

सिस्टम:

public class MyClass { 
    Set<? extends Number> getSet() { 
    return new HashSet<Integer>(); 
    } 
} 

और परीक्षण का मामला:

import static org.mockito.Mockito.*; 

import java.util.HashSet; 
import java.util.Set; 

import org.junit.Test; 

public class TestMyClass { 
    @Test 
    public void testGetSet() { 
    final MyClass mockInstance = mock(MyClass.class); 

    final Set<Integer> resultSet = new HashSet<Integer>(); 
    resultSet.add(1); 
    resultSet.add(2); 
    resultSet.add(3); 

    doReturn(resultSet).when(mockInstance).getSet(); 

    System.out.println(mockInstance.getSet()); 
    } 
} 

कोई त्रुटि या चेतावनी दमन

+1

बदसूरत लेकिन काम करता है। मुझे इस वाक्यविन्यास से दो कारणों से नफरत है। पठनीयता और तथ्य यह है कि हम जेनेरिकों का उपयोग करने से पूरी तरह से इस्तीफा दे रहे हैं। क्या जेनेरिक के साथ ऐसा करना वास्तव में असंभव है? – piotrek

+0

मैं सिंटैक्स के नापसंद को समझता हूं, मैं उस समय के सिंटैक्स को भी पसंद करता हूं। मैं समझ नहीं पा रहा हूं कि जेनिक्स के साथ ऐसा करना असंभव होने के बारे में आपका क्या मतलब है। –

+0

मैं doReturn के पैरामीटर के बारे में बात कर रहा हूं। यह वस्तु है। यह उस प्रकार के किसी भी तरीके से बाध्य नहीं है जिसे वापस किया जाना चाहिए। कोई संकलन-समय प्रकार की जांच नहीं है। हालांकि अगर मुझे कोई बेहतर जवाब नहीं मिलता है तो मैं इसे ले जाऊंगा, क्योंकि जैसा कि मैंने कहा - यह वास्तव में – piotrek

संबंधित मुद्दे