2012-10-15 3 views
1

OC 초보자입니다. 메서드가 다른 클래스에서 호출되는지 확인해야합니다. 다음은 내 코드입니다.OCMock을 사용하여 메서드가 호출되는지 확인하십시오.

//Creating the OCMockObject 
id mockProductRequest = [OCMockObject mockForClass:[ProductRequest class]]; 
[[mockProductRequest expect] testProductRequest]; 

//Creating the object where the mock object will be invoked 
ProductService *actualService = [[ProductService alloc] init]; 
[actualService testProductService]; 

[mockProductRequest verify]; 

-(void)testProductService{ 
//Method where the mock object's method is invoked 
ProductRequest *request = [[ProductRequest alloc] init]; 
[request testProductRequest]; 
} 

나는 항상 예외가 발생하지 않는 것으로 보입니다. 제가 여기서 뭘 잘못하고 있는지 알아 내려고 도와주세요.

+0

같은 조롱 하나 실제 ProductRequest 교환 OCMockObject를 만드는 위치가 명확 해지는 방법? – Pfitz

+0

@Pfitz 내 코드에 의견을 추가했습니다. 도움이 되었으면 좋겠어요. – Jani

답변

3

ProductService 실제 요청을 교체해야합니다. 이 같은 요청에게 ProductService의 속성을함으로써 예를 들어이 archiev 수 있습니다

@interface ProductService 
@property (strong) ProductRequest *request 

을 한 다음에 코드를 수정하시기 바랍니다 수있는이

- (void)testProductService { 
    id mockProductRequest = [OCMockObject mockForClass:[ProductRequest class]]; 
    [[mockProductRequest expect] testProductRequest]; 

    ProductService *actualService = [[ProductService alloc] init]; 
    actualService.request = mockProductReqeust; 

    // call some method on actualService which invokes the request 

    [request testProductRequest]; 


} 
+0

@Pfitz에게 훌륭한 사례를 제공해 주셔서 감사합니다. 또한 코드를 테스트 할 수있는 방법을 명확하게 보여줍니다. – Jani

2

모의 객체의 목적은 테스트하려는 객체를 대체하는 것입니다. 그러나 당신의 코드에서 testProductRequest라는 메시지를 여러분의 MockObject가 아닌 실제 ProductRequest에 보냅니다!

+0

올바른 경로로 인도 해 주신 덕분에 @iSoftTom에게 감사드립니다. 많은 감사를드립니다. – Jani