Подтвердить что ты не робот

Как получить издеваемое значение при вызове isKindOfClass для объекта OCMock?

Передача объекта OCMock методу, в котором функция вызывает isKindOfClass. Однако для unit test возвращаемое значение не относится к классу издевательства, но OCMockObject

4b9b3361

Ответ 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];
}