2013-08-17 21 views
13

Jednym z parametrów mojej metody jest ** błąd i mój projekt jest w trybie ARC. Podczas pisania kodu pośredniczącego dla tej metody wywołania metody próbnej ustawiam parametr poniżej możliwych wartości. Albo powoduje błąd kompilacji, albo nie dopasowuje argumentu do wywołania metody próbnej.Jak pozorować parametr ** w OCMock w ARC

  1. OCMOCK_ANY
  2. [OCMArg anyPointer]
  3. Utworzono błąd obiektu NSError i powiedział: [OCMArg SETTO błędzie].

Nic nie działa.

Jak udawać taką metodę? Proszę o poradę.

Edit

-(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 na testMockMethod działa.

Odpowiedz

19

Można użyć setTo: lub anyPointer jeśli rzucisz go:

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

lub:

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

Oto przypadek testowy, który przechodzi ze sposobem masz Wysłany:

@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 en] andCall: @selector (mockGetWakeupCallsForRoomNumber: błąd :) onObject Samodzielny] getWakeupCallsForRoomNumber: błąd OCMOCK_ANY ((NSError __autoreleasing **) [OCMArg anyPointer])]; połączenia nie odwołują się do metody próbnej. Proszę pomóż. – Saran

+0

Dodaj pytanie testowe i kod, który testujesz do swojego pytania. –

+0

Dodano kod. To jest w bibliotece odpowiedzialnej za podłączenie serwera zaplecza. Moją intencją jest posiadanie umiejętności dostarczania fałszywych informacji do czasu wdrożenia wymaganej usługi w zapleczu. – Saran

2

Wreszcie to jest to, co zaimplementowałem.

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