2013-08-17 26 views
13

Một trong các tham số của phương pháp của tôi là ** lỗi và dự án của tôi ở chế độ ARC. Khi viết sơ khai cho phương thức này để gọi một phương thức giả, tôi đặt tham số bên dưới các giá trị có thể. Hoặc là nó gây ra lỗi biên dịch hoặc không khớp đối số để gọi phương thức giả.Làm thế nào để mô phỏng ** tham số trong OCMock trong ARC

  1. OCMOCK_ANY
  2. [OCMArg anyPointer]
  3. Tạo một lỗi đối tượng NSError và nói [OCMArg setTo: lỗi].

Không có gì hiệu quả.

Làm thế nào để thử phương pháp như vậy? Làm ơn cho lời khuyên.

Sửa

-(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 
{ 
} 

Mock trên testMockMethod hoạt động.

Trả lời

19

Bạn có thể sử dụng setTo: hoặc anyPointer nếu bạn cast nó:

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

hay:

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

Dưới đây là một trường hợp thử nghiệm mà đi với phương pháp bạn đã đăng:

@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 
+0

[[[WCM cuống] andCall: @selector (mockGetWakeupCallsForRoomNumber: lỗi :) onObject: tự] getWakeupCallsForRoomNumber: Lỗi OCMOCK_ANY: ((NSError __autoreleasing **) [OCMArg anyPointer])]; các cuộc gọi không gọi phương thức giả. Hãy giúp tôi. – Saran

+0

Vui lòng thêm trường hợp thử nghiệm và mã bạn đang thử nghiệm cho câu hỏi của mình. –

+0

Đã thêm mã. Đây là thư viện chịu trách nhiệm kết nối máy chủ phụ trợ. Ý định của tôi là có khả năng cung cấp mô hình cho đến khi dịch vụ được yêu cầu được triển khai ở phần cuối. – Saran

2

Cuối cùng, đây là những gì tôi đã triển khai.

[ 
[[wcm stub] 
      andCall:@selector(getWakeupCallsForRoomNumber:error:serverMessage:) 
    onObject:self] 
    getWakeupCallsForRoomNumber:OCMOCK_ANY 
         error:((NSError *__autoreleasing *)[OCMArg anyPointer]) 
       serverMessage:((NSString *__autoreleasing *)[OCMArg anyPointer])]; 
Các vấn đề liên quan