2013-07-19 2 views
0

내 프로젝트에서 MKNetworkKit을 실행하려했지만 문제가없는 것으로 보입니다. 그런 다음 단위 테스트 프로젝트를 만들고 MkNetworkOperation을 사용하여 요청을하도록 엔진을 호출합니다. 명백한 오류는 없지만 completionhandler 블록은 결코 호출되지 않으며 오류 블록도 발생합니다.iOS 필기구 테스트 (Mknetworkkit 포함)

유닛 테스트 설정을 점검했는데 명백한 오류가없고 모든 것이 "실행"되었습니다. 나는 다만 어떤 응답도 얻지 않는다. 내 주요 프로젝트에서 이것을 전환하고 수행하면 작동합니다.

또한 단위 테스트 프로젝트에 필요한 모든 프레임 워크를 추가했습니다.

내가 알아 채는 한 가지 사실은 도달 가능성 메시지가 효과가있는 경우에 대해서는 인쇄되지만 didnt에 대해서는 아무것도 표시되지 않는다는 것입니다.

무슨 일이 일어나는가?

답변

1

요청이 반환 될 때까지 실행을 차단하기 위해 세마포어 나 비슷한 것이 필요합니다. 단위 테스트는 메소드가 끝날 때까지 실행됩니다. 오류없이 메서드가 끝나면 성공했습니다. MKNetworkKit을 사용하고 있기 때문에 서버 요청은 비동기이므로 요청이 완료되기 전에 메서드의 끝 부분에 도달합니다. 나는 단위 테스트에 도움이되는 도우미 클래스를 찾았습니다. 나는 그것을 다시 찾아서 몇 가지 샘플 코드로 링크하려고 노력할 것이다.

는 발견 : 나는 테스트를 쓴 이후

http://www.touch-code-magazine.com/unit-testing-for-blocks-based-apis/ 그래서 그 동안되었습니다. 나는 이것이 잘 될 것이라고 확신하지만, 그것을 조정해야 할 수도 있습니다.

-(void)tests { 
    //setup 
    NSString *key = @"myTestKey"; 

    //test 
    STAssertNoThrow(
     [API resetPassword:@"[email protected] callback:^(NSDictionary *result) { 

     STAssertNotNil(result, @"reset pass response was nil"]); 
     [[TestSemaphor sharedInstance] lift:key]; 
    } error:^(NSDictionary *error) { 

     STFail(@"reset password failed: %@", error.description); 
     [[TestSemaphor sharedInstance] lift:key]; 
    }], @"reset password failed"); 

    [[TestSemaphor sharedInstance] waitForKey:key]; 
} 
+0

예, 작동합니다. 감사! – kawingkelvin