2013-05-02 7 views
26

में नकली तर्क कैप्चरिंग करने का कोई तरीका है मैंने चारों ओर देखा है और इसका कोई फायदा नहीं हुआ है। इंटरवेब्स पर मौजूद उदाहरण कम हैं, और आईएमएचओ बहुत सरल है। मेरे उपयोग के मामले:क्या स्पॉक

('itocNetworkHandler' नीचे नकली है)

when: "we're doing stuff" 
    StandardResponse response = cms.doCardStuff("123", "111", order) 
.... 
then: "we get proper calls and response object" 
    1 * cms.itocNetworkHandler.doNetworkCall(
      { it instanceof ReplacementRequestRecord 
      }, StandardResponseRecord.class) >> record 

मैं पैरामीटर दूर स्टोर करने के लिए चाहते हैं ('यह') नकली पर "doNetworkCall" करने के लिए।

कारण मैं पैरामीटर चाहता हूं क्योंकि जिस वस्तु का मैं परीक्षण कर रहा हूं वह मुझे मापदंडों में लेना, सामान करना, एक नई वस्तु बनाना और उसे मेरे नकली में पास करना है। मैं यह सुनिश्चित करना चाहता हूं कि बनाई गई वस्तु उस तरीके से दिखती है जिसकी अपेक्षा है।

पॉइंटर्स की बहुत सराहना की गई।

+0

आप तर्क क्यों संग्रहीत करना चाहते हैं? आप इसके साथ क्या करेंगे? –

+0

मैंने ऊपर स्पष्ट किया कि मुझे इसकी आवश्यकता क्यों है। – Mathias

उत्तर

35

आप इस प्रकार एक तर्क पर कब्जा कर सकते हैं:

// must be declared before when-block (or inside Specification.interaction {}) 
def captured 

when: 
... 

then: 
1 * mock.doNetworkCall(...) >> { record, recordClass -> 
    // save the argument 
    captured = record 
    ... 
} 
// use the saved argument 
captured == ... 

जिसके अनुसार, अक्सर इस तरह के तर्क बाधा (जैसे ...doNetworkCall({ it == ... })) में होने की उम्मीद रिकॉर्ड सही जाँच के रूप में एक सरल उपाय है।

+0

धन्यवाद, काम करता है। जिस कारण से मैं इसे "it ==" आदि में नहीं चाहता हूं, यह है कि मैं बहुत सारे चेक देखना चाहता हूं, और मुझे लगता है कि अंत में सभी आवेषण होने के लिए यह बहुत कठिन है, अगर आप देखते हैं कि मेरा क्या मतलब है। – Mathias

+0

आप चेक को एक सहायक विधि में डाल सकते हैं, और तर्क बाधा से सहायक विधि को कॉल कर सकते हैं। –

+1

हाँ, यह एक संभावना है। मुझे लगता है कि मैं उन्हें अंत में पसंद करता हूं। पैरामीटर ब्लॉक के भीतर आवेषण करने के लिए थोड़ा सा "स्नीकी" लगता है, पठनीयता के लिए मुझे अंत में पसंद है। या शायद मैं सिर्फ लिंगो के लिए उपयोग नहीं किया जाता है। – Mathias

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