2016-08-17 4 views
0

에서 만든 모의 작업을 수행하려면 OCMock 라이브러리를 사용하고 있습니다. 나는에 의해 조롱 작업을 만들 수 있습니다 알고사용 내가 <code>Worker</code> 클래스의 헤더가 초기화

id mockedTask = OCMClassMock([MyTask class]); 

그러나, 어떻게 테스트 케이스 내Worker예를에이 조롱 작업을 주입 할 수 있습니까? 나는 내 테스트 클래스의 노동자 인스턴스를 만들 때 작업이, 방법 initialiser 만들어집니다 의미 :

-(void)setup{ // how to inject the mocked task in to this workerUnderTest Worker *workerToTest = [[Worker alloc] initWithName:@"John"]; } 

나는 시험에 사용되는 조롱 작업이 필요합니다. 그것을 어떻게 성취 할 수 있습니까? 위에서 보듯이

==== @ iSashok의 대답에 내 테스트 케이스 (작동하지 않음) ====은

@interface WorkerTestCase : XCTestCase 
@end 

@implementation WorkerTestCase{ 
    Worker *workerToTest; 
    id mockedTask; 
} 
- (void)setUp { 
    [super setUp]; 
    workerToTest = [[Worker alloc] initWithName:@"John"]; 

    mockedTask = OCMClassMock([MyTask class]); 
    OCMStub([workerToTest task]).andReturn(mockedTask); 
} 

-(void) testDoWork{ 
[workerToTest doWork]; 
// it fails. method is not invoked! 
OCMVerify([mockedTask start]); 
} 
... 
@end 

, 내 테스트 케이스가 실패, 그것은이 있음을 불평 mockedTask 개체에 대한 호출이 없습니다. 그러나 실제 클래스 구현에 중단 점을 설정하면 [task start]이 호출되고 mockedTask이 성공적으로 주입되지 않았 음을 나타냅니다.

+0

당신처럼

당신의 방법을 볼 것이다 작업자 속성을 작업으로 가지고 있습니까? 작업자 작업? 어떤 MyTask 개체입니다. – Sofeda

+0

'task'는'Worker' 클래스의 인스턴스 변수입니다. –

+0

Worker 클래스의 initialiser가 있으므로 MyTask 클래스의 initialiser가 있어야하며 여기에 MyTask 객체를 초기화 할 때 Worker 클래스 이니셜 라이저에서 호출해야합니다. 이제 설정에서 workerToTest.task = mockedTask를 설정하십시오. 또는 테스트 케이스 쓰기 OCMClassMock ([MyTask initialiser method]); – Sofeda

답변

0

당신은 아래와 같이 OCMStub()를 사용하여 주입 할 수 있으며 속성으로 task 바르를 선언 할 필요

@interface Worker : NSObject 
@property(nonatomic,strong)MyTask *task; 
@end 

//

id mockedTask = OCMClassMock([MyTask class]); 
OCMStub([workerToTest task]).andReturn(mockedTask); 
-(void)setup{ 
    // how to inject the mocked task in to this workerUnderTest 
    Worker *workerToTest = [[Worker alloc] initWithName:@"John"]; 

    id mockedTask = OCMClassMock([MyTask class]); 
    OCMStub([workerToTest task]).andReturn(mockedTask); 
} 
+0

workerToTest로 부분적으로 'Worker'를 조롱 한 것은 무엇입니까? –

+0

컴파일러 오류 "선택기 '작업'에 대한 알려진 인스턴스 메소드가 없습니다." –

+0

동일한 구현. 만약 당신이 심지어 전체 모의 구현을 스텁한다면, – iSashok