2013-03-01 2 views
12

함수가 isKindOfClass를 호출하는 메서드에 OCMock 개체 전달. 그러나 유닛 테스트의 경우 반환 된 값은 조롱 된 클래스가 아니라 OCMockObject입니다.OCMock 객체에 대해 isKindOfClass를 호출 할 때 조롱 된 값을 얻는 방법은 무엇입니까?

+1

OCMockObject가 해당 프레임 워크의 기본 클래스 인 것으로 나타납니다. + (id) mockForClass : Class를 호출하고 생성 된 객체가 왜 조롱 된 클래스로보고되지 않는지 궁금하십니까? – JiuJitsuCoder

+0

이 문제가 계속되는 경우 유스 케이스를 제공 할 수 있습니까? 너 뭐하려고? 일부 코드는 분석에 도움이됩니다. –

+0

매개 변수의 클래스에 따라 객체를 만드는 모든 팩토리 클래스에 유용 할 수 있습니다. 제 경우에는 이러한 공장을 테스트하기 위해 모의 대신 실제 객체를 만들어야합니다. – Giuseppe

답변

0

OCMock 객체를 함수 isKindOfClass를 호출하는 메소드에 전달하려면 부분 모의 객체를 만들어야합니다. 다음 코드는 도움이 될 것입니다. 그것은 나를 위해 일했습니다. 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]; 
} 
+0

mock/niceMock을 사용하면 객체를 인스턴스화 할 필요가 없다는 이점이 있습니다. 내 경우에는 그 객체를 만드는 것이 어렵습니다. – Giuseppe

+0

확인. 하나의 대안은 isKindOfClass 메소드를 조롱하는 것입니다. 이 같은 id master = [OCMockObject niceMockForClass : [SecondViewController class]]; BOOL ret = YES; // 값을 변경할 수 있습니다. [[[master expect] andReturnValue : OCMOCK_VALUE (ret)] isKindOfClass : [SecondViewController class]]; –

+0

내가하는 일은 niceMock을 사용하고 "class"메서드를 스터핑하여 조롱 된 클래스를 반환하는 것입니다. kindOfClass에 대해 YES를 반환하는 것이 더 안정적입니다. 이것이 왜 OCMock의 기본 동작이 아닌지는 분명하지 않습니다. – Giuseppe

1

될 것이다 내부

-(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]; 
} 

해봐요 방법을 작성하는 방법을 정확히 설명하는 전체 기사입니다 메서드 (기본적으로 존재하지 않음) 및 사용 방법 : http://blog.carbonfive.com/2009/02/17/custom-constraints-for-ocmock/

관련 문제