2013-08-17 8 views
13

में ओसीएमॉक में ** पैरामीटर का नकल कैसे करें मेरी विधि का पैरामीटर ** त्रुटि है और मेरी परियोजना एआरसी मोड में है। नकली विधि को कॉल करने के लिए इस विधि के लिए स्टब लिखते समय मैं संभावित मानों के नीचे पैरामीटर सेट करता हूं। या तो यह संकलन त्रुटि का कारण बनता है या नकली विधि को कॉल करने के लिए तर्क से मेल खाने में विफल रहता है।एआरसी

  1. OCMOCK_ANY
  2. [OCMArg anyPointer]
  3. एक NSError वस्तु त्रुटि बनाया और कहा [OCMArg setTo: त्रुटि]।

कुछ भी काम नहीं करता है।

इस तरह की विधि का नकल कैसे करें? कृपया सलाह दें।

संपादित

-(id)init{ 

    self = [super init]; 

    if (self) { 
     id wcm = [OCMockObject partialMockForObject:self]; 
     [[[wcm stub] andCall:@selector(mockGetWakeupCallsForRoomNumber:error:) onObject:self] getWakeupCallsForRoomNumber:OCMOCK_ANY error:((NSError __autoreleasing **) [OCMArg anyPointer])]; 
     //[[[wcm stub] andCall:@selector(testMockMethod) onObject:self] testMethod]; 

    } 
    return self; 

} 

-(void)testMethod 
{ 
    NSLog(@"Original"); 
} 

-(void)testMockMethod 
{ 
    NSLog(@"Mock"); 
} 
-(NSArray*)mockGetWakeupCallsForRoomNumber:(NSString*)roomNumber error:(NSError**)error 
{ 
    @throw @"Mock method called"; 
} 

-(NSArray*)getWakeupCallsForRoomNumber:(NSString*)roomNumber error:(NSError**)error 
{ 
} 

testMockMethod पर मॉक काम करता है।

उत्तर

19

आप setTo: या anyPointer उपयोग कर सकते हैं यदि आप इसे डाली:

[[[mockFoo expect] andReturn:nil] someMethodWithError:((NSError __autoreleasing **)[OCMArg anyPointer])]; 

या:

@interface Foo : NSObject{} 

-(NSArray*)mockGetWakeupCallsForRoomNumber:(NSString*)roomNumber error:(NSError**)error; 
-(NSArray*)getWakeupCallsForRoomNumber:(NSString*)roomNumber error:(NSError**)error; 

@end 

@implementation Foo 

-(NSArray*)mockGetWakeupCallsForRoomNumber:(NSString*)roomNumber error:(NSError**)error 
{ 
    return @[@"bar"]; 
} 

-(NSArray*)getWakeupCallsForRoomNumber:(NSString*)roomNumber error:(NSError**)error 
{ 
    return nil; 
} 

@end 

@interface SomeTest : SenTestCase {} 
@end 

@implementation SomeTest 

-(void)testMethod 
{ 
    Foo *foo = [Foo new]; 
    id wcm = [OCMockObject partialMockForObject:foo]; 
    [[[wcm stub] andCall:@selector(mockGetWakeupCallsForRoomNumber:error:) onObject:foo] getWakeupCallsForRoomNumber:OCMOCK_ANY error:((id __autoreleasing *)[OCMArg anyPointer])]; 
    NSError *error; 
    NSArray *calls = [wcm getWakeupCallsForRoomNumber:@"foo" error:&error]; 
    STAssertEquals(calls[0], @"bar", @"should match"); 
} 

@end 
:

NSError *error; 
[[[mockFoo expect] andReturn:nil] someMethodWithError:((NSError __autoreleasing **)[OCMArg setTo:error])]; 

यहाँ एक परीक्षण का मामला है कि विधि द्वारा पोस्ट की गई साथ गुजरता है

+0

[[[डब्ल्यूसीएम ठूंठ] andCall: @selector (mockGetWakeupCallsForRoomNumber: त्रुटि :) onObject: स्वयं] getWakeupCallsForRoomNumber: OCMOCK_ANY त्रुटि: ((NSError __autoreleasing **) [OCMArg anyPointer])]; कॉल नकली विधि का आह्वान नहीं कर रहे हैं। कृपया मदद करे। – Saran

+0

कृपया परीक्षा केस और कोड जो आप अपने प्रश्न के लिए परीक्षण कर रहे हैं उसे जोड़ें। –

+0

कोड जोड़ा गया। यह बैकएंड सर्वर को जोड़ने के लिए ज़िम्मेदार पुस्तकालय में है। मेरा इरादा बैकएंड पर आवश्यक सेवा लागू होने तक नकली प्रदान करने की क्षमता है। – Saran

2

आखिर में यह मैंने लागू किया।

[ 
[[wcm stub] 
      andCall:@selector(getWakeupCallsForRoomNumber:error:serverMessage:) 
    onObject:self] 
    getWakeupCallsForRoomNumber:OCMOCK_ANY 
         error:((NSError *__autoreleasing *)[OCMArg anyPointer]) 
       serverMessage:((NSString *__autoreleasing *)[OCMArg anyPointer])];