함수가 isKindOfClass를 호출하는 메서드에 OCMock 개체 전달. 그러나 유닛 테스트의 경우 반환 된 값은 조롱 된 클래스가 아니라 OCMockObject입니다.OCMock 객체에 대해 isKindOfClass를 호출 할 때 조롱 된 값을 얻는 방법은 무엇입니까?
답변
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];
}
mock/niceMock을 사용하면 객체를 인스턴스화 할 필요가 없다는 이점이 있습니다. 내 경우에는 그 객체를 만드는 것이 어렵습니다. – Giuseppe
확인. 하나의 대안은 isKindOfClass 메소드를 조롱하는 것입니다. 이 같은 id master = [OCMockObject niceMockForClass : [SecondViewController class]]; BOOL ret = YES; // 값을 변경할 수 있습니다. [[[master expect] andReturnValue : OCMOCK_VALUE (ret)] isKindOfClass : [SecondViewController class]]; –
내가하는 일은 niceMock을 사용하고 "class"메서드를 스터핑하여 조롱 된 클래스를 반환하는 것입니다. kindOfClass에 대해 YES를 반환하는 것이 더 안정적입니다. 이것이 왜 OCMock의 기본 동작이 아닌지는 분명하지 않습니다. – Giuseppe
될 것이다 내부
-(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/
OCMockObject가 해당 프레임 워크의 기본 클래스 인 것으로 나타납니다. + (id) mockForClass : Class를 호출하고 생성 된 객체가 왜 조롱 된 클래스로보고되지 않는지 궁금하십니까? – JiuJitsuCoder
이 문제가 계속되는 경우 유스 케이스를 제공 할 수 있습니까? 너 뭐하려고? 일부 코드는 분석에 도움이됩니다. –
매개 변수의 클래스에 따라 객체를 만드는 모든 팩토리 클래스에 유용 할 수 있습니다. 제 경우에는 이러한 공장을 테스트하기 위해 모의 대신 실제 객체를 만들어야합니다. – Giuseppe