2014-11-14 2 views
1

OCMock을 처음 사용했습니다. 제가 테스트 할 다음과 같은 간단한 코드가 -중간 변수가있는 OCMock 테스트 코드

@implementation ViewController 

- (void)presentSomething:(NSString *)string { 
    NSLog(@"doSomethingElseWithString - %@", string); 
} 

- (BOOL)handleResult:(NSString *)result 
{ 
    BOOL handled = YES; 
    NSString *changedString = [result uppercaseString]; 
    [self presentSomething:changedString]; 
    return handled; 
} 

@end 

을 내가 presentSomething은 내가 handleResult를 호출 한 후 올바른 인수와 함께 호출됩니다 확인하려면

- (void)testExample { 
    ViewController *vc = [ViewController new]; 
    id mockViewController = OCMPartialMock(vc); 
    OCMStub([mockViewController presentSomething:@"1234"]); 

    BOOL handled = [vc handleResult:@"1234"]; 
    XCTAssertTrue(handled); 

    OCMVerify([mockViewController presentSomething:@"1234"]); 
} 

을 다음과 같이 나는 시험이있다.

테스트는 presentSomething 메서드가 호출되지 않았 음을 확인하거나 실패하는 동안 EXC_BAD_ACCESS를 제공합니다.

handleResult 메서드를 다음과 같이 변경하면 테스트가 실행되고 전달됩니다.

- (BOOL)handleResult:(NSString *)result 
{ 
    BOOL handled = YES; 
    [self presentSomething:result]; 
    return handled; 
} 

중간 [result uppercaseString] 및 변수가 문제를 일으킨 것으로 보입니다. OCMock 또는 OCMock의 버그를 어떻게 사용하고 있습니까?

답변

0

isEquals 대신 포인터 비교를 수행해야합니다. 아직 소스 코드에 대해이 문제를 디버깅하지 않았지만 해결 방법이 있습니다.

- (void)testExample 
{ 
    ViewController *vc = [ViewController new]; 
    id mockViewController = OCMPartialMock(vc); 
    OCMExpect([mockViewController presentSomething:@"1234"]);  
    BOOL handled = [vc handleResult:@"1234"]; 
    XCTAssertTrue(handled);  
    OCMVerifyAll(mockViewController); 
}