Как издеваться над параметром ** в OCMock в ARC
Один из параметров моего метода - ** ошибка, и мой проект находится в режиме ARC. При написании заглушки для этого метода для вызова метода mock я устанавливаю параметр ниже возможных значений. Либо он вызывает ошибку компиляции, либо не соответствует аргументу для вызова метода макета.
- OCMOCK_ANY
- [OCMArg anyPointer]
- Создал ошибку объекта NSError и сказал [OCMArg setTo: error].
Ничего не работает.
Как издеваться над таким методом? Пожалуйста, совет.
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
{
}
Выполняется макет на testMockMethod.
Ответы
Ответ 1
Вы можете использовать setTo:
или anyPointer
, если вы его внесете:
[[[mockFoo expect] andReturn:nil] someMethodWithError:((NSError __autoreleasing **)[OCMArg anyPointer])];
или
NSError *error;
[[[mockFoo expect] andReturn:nil] someMethodWithError:((NSError __autoreleasing **)[OCMArg setTo:error])];
Здесь тестовый пример, который проходит с помощью метода, который вы опубликовали:
@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
Ответ 2
Наконец, это то, что я реализовал.
[
[[wcm stub]
andCall:@selector(getWakeupCallsForRoomNumber:error:serverMessage:)
onObject:self]
getWakeupCallsForRoomNumber:OCMOCK_ANY
error:((NSError *__autoreleasing *)[OCMArg anyPointer])
serverMessage:((NSString *__autoreleasing *)[OCMArg anyPointer])];