2012-02-20 8 views
5

मैं निम्नलिखित कोड है:कोई भी (MyClass.class) जो वास्तव में उत्तीर्ण वर्ग के प्रकार के वर्गों से मेल खाता है?

verify(javaCompiler, times(1)).writeJavaAndCompile(any(ContractCompilationUnit.class), eq(outputDirectory)); 
verify(javaCompiler, times(1)).writeJavaAndCompile(any(ParamCompilationUnit.class), eq(outputDirectory));  

और मेरे कोड निम्नलिखित है: के रूप में ऐसा लगता है 1 की पुष्टि देखता है कि javaCompiler.writeJavaAndCompile() करने के लिए 2 कॉल थीं,

javaCompiler.writeJavaAndCompile(new ContractCompilationUnit(), outputDirectory); 
javaCompiler.writeJavaAndCompile(new ParamCompilationUnit(), outputDirectory); 

कोड विफल हो रहा है। यह महसूस करने में असफल रहा है कि ContractCompilationUnit प्रकार का केवल एक कॉल था।

इस व्यवहार से बचने के लिए मानक प्रक्रिया क्या है (अपना खुद का मैचर लिखने के अलावा)?

उत्तर

6

documentation से पता चलता है कि इस नाम से जाना जाता व्यवहार है:

किसी भी तरह का वस्तु, किसी वर्ग के लिए आवश्यक नहीं। क्लास तर्क केवल कास्टिंग से बचने के लिए प्रदान किया जाता है। कभी कभी anyObject() की तुलना में बेहतर लग रहा है - खासकर जब स्पष्ट कास्टिंग anyObject() के लिए आवश्यक है

उर्फ ​​

इस विधि किसी भी प्रकार की जाँच करता ऐसा नहीं करते हैं, यह केवल है अपने कोड में कास्टिंग से बचने के लिए । भविष्य में बड़ी रिलीज में हालांकि यह बदल सकता है (चेक चेक जोड़ा जा सकता है)।

ऐसा लगता है कि आप isA बजाय का उपयोग करना चाहिए:

verify(javaCompiler).writeJavaAndCompile(isA(ContractCompilationUnit.class), 
             eq(outputDirectory)); 
+1

हाँ, निश्चित रूप से 'isA'। लेकिन कृपया 'समय (1) 'नहीं लिखें - यह कुछ भी नहीं जोड़ता है और यह मेरी त्वचा को क्रॉल करता है। –

+0

@ डेविड वालस: मैं केवल ओपी के मूल कोड की प्रतिलिपि बना रहा था :) मॉकिटो का उपयोग नहीं किया जा रहा है, मैं शायद पूरी तरह से उस कॉल को हटा सकता हूं? –

+0

ऐसा करने के लिए धन्यवाद, @ जोन्स स्केट। आपने अभी दुनिया को थोड़ा सा स्थान दिया है। –

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

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