2010-12-05 10 views
27

के साथ एक बूल लौटाता है जो एक विधि को दबाता है मैं ओसीएमॉक 1.70 का उपयोग कर रहा हूं और मुझे एक साधारण विधि का मज़ाक उड़ाते हुए समस्या है जो एक बूल मान देता है। यहां मेरा कोड है:ओसीएमॉक

@interface MyClass : NSObject 
- (void)methodWithArg:(id)arg; 
- (BOOL)methodWithBOOLResult; 
@end 
@implementation MyClass 
- (void)methodWithArg:(id)arg { 
    NSLog(@"methodWithArg: %@", arg); 
} 
- (BOOL)methodWithBOOLResult { 
    NSLog(@"methodWithBOOLResult"); 
    return YES; 
} 
@end 

- (void)testMock { 
    id real = [[[MyClass alloc] init] autorelease]; 
    [real methodWithArg:@"foo"]; 
    //=> SUCCESS: logs "methodWithArg: foo" 

    id mock = [OCMockObject mockForClass:[MyClass class]]; 
    [[mock stub] methodWithArg:[OCMArg any]]; 
    [mock methodWithArg:@"foo"]; 
    //=> SUCCESS: "nothing" happens 

    NSAssert([real methodWithBOOLResult], nil); 
    //=> SUCCESS: logs "methodWithBOOLResult", YES returned 

    BOOL boolResult = YES; 
    [[[mock stub] andReturn:OCMOCK_VALUE(boolResult)] methodWithBOOLResult]; 
    NSAssert([mock methodWithBOOLResult], nil); 
    //=> FAILURE: raises an NSInvalidArgumentException: 
    // Expected invocation with object return type. 
} 

मैं क्या गलत कर रहा हूं? - विशेष रूप से NSNumberandReturnValue: स्वीकार करता किसी भीNSValue:

उत्तर

60

आप andReturnValue: नहीं andReturn:

[[[mock stub] andReturnValue:OCMOCK_VALUE(boolResult)] methodWithBOOLResult]; 
5

सुझाव का उपयोग करने की जरूरत है। आदिम/स्केलर रिटर्न मानों के साथ अधिक तेज़ी से स्टब विधियों के लिए, स्थानीय परिवर्तनीय घोषणा पूरी तरह से छोड़ दें और [NSNumber numberWithXxx:...] का उपयोग करें।

उदाहरण के लिए:

[[[mock stub] andReturnValue:@(NO)] methodWithBOOLResult]; 
[[[mock stub] andReturnValue:@(123)] methodWithIntResult]; 
[[[mock stub] andReturnValue:@(123.456)] methodWithDoubleResult]; 
etc. 
+1

ओसीएमॉक के नए संस्करणों को ओसीएमओकेके_वीएमएल को स्थिरांक पर भी काम करना चाहिए; '' OCMOCK_VALUE (NO) '' ',' '' NO''', और '' '(NO)' '' सभी को काम करना चाहिए। –

1

मैं OCMock के संस्करण 3.3.1 का उपयोग कर रहा:

[[[mock stub] andReturnValue:[NSNumber numberWithBool:NO]] methodWithBOOLResult]; 

ऑटो मुक्केबाजी बोनस अंक के लिए, आप नंबर-शाब्दिक वाक्य रचना (Clang docs) का उपयोग कर सकते और इस वाक्य रचना मेरे लिए काम करता है:

SomeClass *myMockedObject = OCMClassMock([SomeClass class]); 
OCMStub([myMockedObject someMethodWithSomeParam:someParam]).andReturn(YES); 

अधिक उदाहरण के लिए OCMock documentation देखें।

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

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