2012-08-22 2 views
0

OCMock을 시작하기에 앞서 나와 있습니다. 설명서와 많은 예제를 살펴 보았지만 확실한 답을 찾기는 어렵습니다. 예를 들어 정적 메서드 내에서 init 호출을 조롱하는 것이 가능합니까?정적 메서드에서 클래스 호출을 OCMock 할 수 있습니까?

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace 
{   
    CTTeleInfo *netInfo = [[CTTeleInfo alloc] init]; 
    CTCarrier *carrier = [netInfo subscriberCell; 
    NSString *mobileNetwork = [carrier carrierName]; 
    if (mobileNetwork == nil) 
     mobileNetwork = @"Unknown"; 

} 

코드를 변경하지 않고 CTTeleInfo 개체를 조롱 할 수 있습니까?

답변

1

이것은 OCMock이 도와 줄 수있는 것이 아닙니다. 아직 클래스 메쏘드를 모방 할 수 있다고하더라도, 모의가 덮어 쓸 수있는 메쏘드로 netInfo 객체의 생성을 추출해야합니다. OCMock의 현재 버전은 클래스 메소드와 객체를 생성하는 방법을 스텁 지금 가능하다는 것을

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace 
{ 
    [self addHeaderToRequest:request namespace:namespace carrier:[[CTTeleInfo alloc] init]]; 
} 

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace carrier:(CTCarrier *)carrier 
{ 
    NSString *mobileNetwork = [carrier carrierName]; 
    if (mobileNetwork == nil) 
     mobileNetwork = @"Unknown"; 
} 
+1

참고 : 코드를 변경할 수있는 경우

는 확실한 해결책이있다. 그래도 오래된 대답은 여전히 ​​바람직한 접근 방법을 설명합니다. –