2011-09-09 9 views
8

से एक ओवरलोड जावा सामान्य विधि मैं एक तरीका है जिसके एक अन-parametrized ArrayList रिटर्न के साथ एक वस्तु उपहास करने के लिए Mockito उपयोग कर रहा हूँ कॉलिंग, और मैं समझ नहीं कैसे यह करने के लिएस्केला

विधि हस्ताक्षर काम करने के लिए प्राप्त करने के लिए नकली

public java.util.ArrayList getX() 

टेस्ट कोड

var mockee = mock(classOf[Mockee]) 
when(mockee.getX).thenReturn(Lists.newArrayList(x): ArrayList[_]) 

थी रों वास्तव में इंटेलीजे में ठीक संकलित, लेकिन रनटाइम पर फेंकता है:

[error] ....scala:89: overloaded method value thenReturn with alternatives: 
[error] (java.util.ArrayList[?0],<repeated...>[java.util.ArrayList[?0]])org.mockito.stubbing.OngoingStubbing[java.util.ArrayList[?0]] <and> 
[error] (java.util.ArrayList[?0])org.mockito.stubbing.OngoingStubbing[java.util.ArrayList[?0]] 
[error] cannot be applied to (java.util.ArrayList[_$1]) 
[error]  when(mockee.getX).thenReturn(Lists.newArrayList(x): ArrayList[_]) 
+0

मैं गलत हो सकता हूं, लेकिन मैंने सोचा कि स्केल में 'ऐरेलिस्ट [_] 'एक असामान्य एरेलिस्ट के समान नहीं है, यह एक अस्तित्वहीन प्रकार है - यानी इसका एक प्रकार का पैरामीटर है, लेकिन यह एक अजीब जगह पर बंधे हैं। मुझे लगता है कि अपरिवर्तित प्रकार 'ArrayList [AnyRef]' यानी 'java.lang.Object' द्वारा पैरामीटर किया जाएगा। – Owen

+1

यह एक संकलन-समय त्रुटि की तरह दिखता है, न कि रन-टाइम त्रुटि। स्कैला का अस्तित्व प्रकार 'ऐरेलिस्ट [_] 'जावा के वाइल्डकार्ड प्रकार' ऐरेलिस्ट 'के निकटतम अनुमान है। आपके पास वास्तव में * कच्चा प्रकार *, 'ArrayList' है। दो SO प्रश्नों को देखने के लिए: [स्कैला के अस्तित्व के प्रकार] (http://stackoverflow.com/questions/1031042/scalas-existential-types) और [कच्चे प्रकार और वाइल्डकार्ड ...] (http://stackoverflow.com/ प्रश्न/348 9947/कच्चे प्रकार के असंबद्ध-विल्डकार्ड-और-बाध्य-वाइल्डकार्ड) –

+0

आप सही हैं कि यह एक संकलित समय त्रुटि है, लेकिन स्कैला प्लगइन द्वारा हाइलाइट नहीं किया गया है। मैं 'तत्कालीन Answers (नया उत्तर [ArrayList [_]] {def answer (arg: InvocationOnMock) = Lists.newArrayList (x)} का उपयोग करके इसके आसपास काम कर सकता हूं)' लेकिन यह बहुत अच्छा नहीं है –

उत्तर

8

मेरे लिए निम्नलिखित काम करता है:

val mockee = mock(classOf[Mockee]) 
when[ArrayList[_]](mockee.getX).thenReturn(Lists.newArrayList) 

संभालने "सूचियों" वर्ग गूगल संग्रह (अब अमरूद) से है।

+0

बिल्कुल सही - मैंने कभी सोचा नहीं विधि पैरामीटर –