2012-04-24 17 views
6

क्या किसी को पता है कि ओसीएमक ऑब्जेक्ट को भेजे गए तर्क को कैप्चर करना है?मैं नकली को भेजे गए तर्क को कैसे प्राप्त करूं?

id mock = [OCMockObject mockForClass:someClass] 
NSObject* captureThisArgument; 
[[mock expect] foo:<captureThisArgument>] 

[mock foo:someThing] 
GHAssertEquals[captured, someThing, nil]; 

मैं foo को तर्क मान्य करने के बारे में कैसे जा सकता हूं? मुझे नकली परिभाषा में भी एक ब्लॉक के भीतर ऐसा करने में प्रसन्नता हो रही है, लेकिन अगर मैं ऑब्जेक्ट निकाल सकता हूं ताकि मैं इसकी विशेषता पर जोर दे सकूं जो बाद में शानदार होगा।

क्या यह ओसीएमॉक के साथ संभव है?

उत्तर

9

आप अपने पैरामीटर मान्य करने के लिए हो सकता है आप इसे सीधे कर सकते हैं, जबकि आप की तरह कुछ के साथ अपने ठूंठ सेट कर रहे हैं चाहते हैं:

id mock = [OCMockObject mockForClass:someClass]; 
NSObject* captureThisArgument; 
[[mock expect] foo:[OCMArg checkWithBlock:^(id value){ 
    // Capture argument here... 
}]]; 

सम्मान, क्वांटिन ए

+0

मुझे यह पसंद है। यह इसी तरह है कि मैं groovy में एक हनक्रिस्ट matcher के साथ मजाक करने के बारे में कैसे जाना होगा। धन्यवाद :)। –

3

आप कॉल ठूंठ और यह एक ब्लॉक है कि यह सत्यापित करता है करने के लिए पारित कर सकते हैं:

NSObject *expected = ...; 

id mock = [OCMockObject mockForClass:someClass] 
void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) { 
    NSObject *actual; 
    [invocation getArgument:&actual atIndex:2]; 
    expect(actual).toEqual(expected); 
}; 
[[[mock stub] andDo:theBlock] foo:[OCMArg any]]; 

[mock foo:expected]; 

वहाँ भी है इस का एक कॉलबैक संस्करण, लेकिन जैसा कि आप एक राज्य चर पर दिखाई देती है की जरूरत नियंत्रण प्रवाह, और अधिक जटिल हो जाता है दोनों अपने परीक्षण और सत्यापन कॉलबैक करने के लिए:

[[[mock stub] andCall:@selector(aMethod:) onObject:anObject] someMethod:someArgument] 
+1

धन्यवाद। @ क्विंटिन का जवाब संक्षिप्त था जिसे मैं उम्मीद कर रहा था, लेकिन मैं वास्तव में आपके उदाहरण की भी सराहना करता हूं। मॉकिंग समय पर एकाधिक तर्कों को सत्यापित करने का उदाहरण होना अच्छा होता है। (अगर कुछ सही नहीं था तो मैं ब्लॉक में दावा फेंक दूंगा)। –

+0

एनएसआईएनवोकेशन के पहले दो तर्क स्वयं और _cmd के लिए आरक्षित हैं; विधि के लिए "पहला" तर्क इंडेक्स 2 पर है। – titaniumdecoy

+0

अच्छी पकड़ @titaniumdecoy। मेरा जवाब अपडेट किया गया। –

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

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