2013-12-12 4 views
1

OCMock을 처음 사용하기 때문에 간단한 것을 간과 한 것일 수도 있지만 문제는 내가 만든 모의 메서드에서 스텁 메서드을 사용할 수 없다는 것입니다.메서드 "클래스"를 OCMock으로 스터 빙

// Unit Test 
id mock = [OCMockObject mockForClass:[MySubClass class]]; 
[[[mock stub] andReturn:[MySubClass class]] class]; 
... 
[someObject someMethodWithParam:mock]; 
... 

여기 someMethodWithParam: 내 구현의 : 여기에 내 테스트의 일부 설정 해요 방법

// Implementation 
- (void)someMethodWithParam:(MySuperClass *)param { 
    [[param class] someClassMethod]; 
} 

문제가를 그 [param class] 반환하는 대신 MySubClassOCClassMockObject. someClassMethod을 호출하면 "클래스에 보낼 수없는 선택기를 보냈습니다"오류가 발생합니다. 부분적인 모의를 사용하려고 시도했지만 도움이되지 않았습니다.

편집 : 당신의 -someMethodWithParam:에서

// Unit Test 
id mock = [OCMockObject mockForClass:[MySubClass class]]; 
[[[mock stub] andReturn:[MySubClass class]] class]; 
XCTAssertEqual([mock class], [MySubClass class], @"The mock's class should be MySubClass"); 

답변

0

봐 :

은 여기 전달하는 간단한 테스트입니다. 아무것도 반환하지 않습니다. 그것은 무효입니다. 그래서 이것은이 방법에 대한 잘못된 테스트입니다. 방법으로 아무 것도 반환 할 수 없더라도 뭔가를 반환해야하는 모의를 만들었습니다. 이 테스트는해야 다음과 같습니다 :

MyClass object = [MyClass new]; /// instance of class which has someMethodWithParam: method 
id mock = [OCMockObject partialMockForObject:object]; 
[[mock expect] someClassMethod]; 

[mock someMethodWithParam:[OCMArg any]]; 
[mock verify]; 

를이 방법 만 당신이 할 수있는 테스트를 기대합니다. 메소드의 메소드가 호출되었는지 테스트 할 수 있습니다. 따라서 전화 할 때 -someMethodWithParam 방법 -someClassMethod이 호출되었는지 테스트 할 수 있습니다. 그게 다야. 그리고 부분 모의 작품을 만들어야합니다.

+1

OCMockObject + mockForClass : 테스트가 필요하지 않은 경우 개체 인스턴스를 저장하기 위해 여기에서도 작동합니다. – ImHuntingWabbits