Передача объекта OCMock методу, в котором функция вызывает isKindOfClass. Однако для unit test возвращаемое значение не относится к классу издевательства, но OCMockObject
Как получить издеваемое значение при вызове isKindOfClass для объекта OCMock?
Ответ 1
Вот целая статья, объясняющая, как именно написать метод OCMock isKindOfClass
(он не существует по умолчанию) и как его использовать: http://blog.carbonfive.com/2009/02/17/custom-constraints-for-ocmock/
Ответ 2
Если вы хотите передать объект OCMock методу, в котором функция вызывает isKindOfClass, вам нужно создать частичный макет. Следующий код может помочь вам. Это сработало для меня.
-(void)testMyTest
{
FirstViewController* masterVC = [[FirstViewController alloc]init];
SecondViewController *second = [[SecondViewController alloc] init];
id master = [OCMockObject partialMockForObject:second];
[[master expect] getName:@"PARAM"];
[masterVC doSomething:master];
[master verify];
[masterVC release];
[second release];
}
doSomething метод внутри FirstViewController
-(void)doSomething:(SecondViewController *)detail
{
if ([detail isKindOfClass:[SecondViewController class]])
{
NSString * returnVal = [detail getName:@"PARAM"];
NSLog(@"returnVal %@",returnVal);
}
}
Еще одна альтернатива - насмешка метода isKindOfClass, поэтому тестовый пример станет
- (void)testMyTest
{
CalculatorViewController* masterVC = [[CalculatorViewController alloc]init];
id master = [OCMockObject niceMockForClass:[SecondViewController class]];
BOOL ret = YES;
[[[master expect] andReturnValue:OCMOCK_VALUE(ret)] isKindOfClass:[SecondViewController class]];
[[master expect] getName:@"PARAM"];
[masterVC doSomething:master];
[master verify];
}