java - JMockit: howto invoke custom method of MockUp -
मेरा आवेदन उपयोग FastScanner
( BufferedReader
के आधार पर) इनपुट को पढ़ने के लिए ( मेरे सवाल का कोड अनुभाग को देखो )।
मैं नकली चाहिए मैं अपने परीक्षण में इनपुट विकल्प चाहते हैं FastScanner
( देखो
समस्या: प्रत्येक इनपुट के लिए मुझे अलग मॉकअप करना चाहिए।
यह ग्रिट हो जाएगा अगर मैं एक नकली अप के अंदर इनपुट स्विच कर सकते हैं
प्रश्न:।? JMockit मॉक-अप करने के लिए कस्टम पद्धतियां जोड़ने का तरीका और से उन्हें फोन
( को देखो switchInput
की विधि FastScanner
mockup )
कोड: [इस अनुभाग वैकल्पिक है, केवल अपने बेहतर समझ के लिए]
फास्टस्केनर
संरक्षित स्थैतिक वर्ग फ़ास्ट-स्कैनर {BufferedReader br; स्ट्रिंगटोकनाइज़र सेंट; फास्टस्कैनर (इनपुटस्ट्रीम एफ) {br = नया BufferedReader (नया इंटस्टस्ट्रीम रीडर (एफ)); } स्ट्रिंग अगली () IOException फेंकता है {while (st == null ||! St.hasMoreTokens ()) {st = new StringTokenizer (br.readLine ()); } वापसी st.nextToken (); } Int nextInt () IOException फेंकता {return Integer.parseInt (अगला ()); }}
FastScanner mockup:
नई mockup & LT; FastScanner & gt; () {निजी पूर्णांक [] इनपुट 1 = नई int [ ] {17, 2, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1}; निजी इंट [] इनपुट 2 = नया इंट [] (5, 2, 2, 3, 3, 3, 3, 3}; निजी इंट [] इनपुट 3 = नया इंट [] (8, 2, 5, 1, 3, 1, 1, 1, 1, 3, 1}; निजी बाइट टॉगलर = 1; निजी बाइट पॉइंटर = 0; // यहां प्रश्न: मैं इस पद्धति को सार्वजनिक रूप से शून्य स्विच इन्पुट () कैसे कहूं? {Toggler ++; सूचक = 0; } @SuppressWarnings ("अप्रयुक्त") int nextInt () IOException फेंकता {int [] input = null; स्विच (टॉगलर) {मामला 1: इनपुट = इनपुट 1; टूटना; मामले 2: इनपुट = input2; टूटना; मामले 3: इनपुट = इनपुट 3; टूटना; } वापसी इनपुट [सूचक ++]; }};
आपके पास एक ही MockUp एक ही समय में उपवर्ग (प्रत्येक ऐसे उपहास केवल पिछले एक को ओवरराइड करेगा जब इसे तत्काल) इसके बजाय, अपने
@Mock
विधि में एक इनवॉइस
पैरामीटर जोड़ें, और उसके बाद कई डेटा सेटों के बीच अंतर करने के लिए प्रदान की जाने वाली जानकारी का उपयोग करें। उदाहरण के लिए:
@Test सार्वजनिक शून्य testClientWithVariedDataFromFastScanners () {नई mockup & LT; FastScanner & gt; () {// परीक्षण डाटा @Mock पूर्णांक nextInt (प्रार्थना किए निवेश संबंधी निर्णय निर्माताओं) के लिए कुछ डेटा संरचना {int IDX = निवेश संबंधी निर्णय .getInvocationIndex (); फास्टएसकैनर एफएस = inv.getInvokedInstance (); // आंकड़ों संरचनाओं में आईडीएक्स या एफएस का प्रयोग करके अगले मान का पता लगाएं: ii ... I return ...; }}; client.doSomethingUsingFastScanners (); }
इसके अलावा, यदि आप एक नकली उप-वर्ग पर जो भी तरीकों ( स्थिर
विधियों सहित) को कॉल करना चाहते हैं, बस इसे नामित करें एक गुमनाम एक के बजाय वर्ग।
Comments
Post a Comment