2011-01-13 2 views
7

OCUnit을 사용하여 비동기 코드를 테스트 할 수있는 기존 라이브러리를 아는 사람이 있습니까? 나는 GHAsyncTestCase과 같은 것을 생각하고 있는데, 이는 SenTestCase에서 제공됩니다.OCUNit을 사용하는 iOS의 비동기 코드 테스트

내가 찾지 못한다면 GHAsyncTestCase을 OCUnit으로 이식 할 예정이지만 다른 사람이 이미 완료 한 작업을 복제하고 싶지 않기 때문에 묻습니다.

+0

응답

WAIT_WHILE(<expression_to_evaluate>, <max_duration>); 

하지만 난 물어 봐야; 왜 단위 테스트를 실행하기 위해 일반적으로 사용되는 프레임 워크에서 비동기 동작을 테스트해야 할 필요성을 느낍니까? 행동의 두 반쪽을 신뢰하지 않습니까? 따로 테스트 할 수 없습니까? 당신은 정말로 통합 테스트를 작성하고 있습니까? – Jonah

+0

@Jonah, 네 말이 맞다.하지만 때로는 전체 네트워크 계층을 조롱하기에는 게으르다. 그런 다음 로컬 서버와 통합 테스트를 실행하는 것이 좋습니다. –

답변

11

표트르 :

당신은 내가 Mimic으로 수행 한 작업에 관심이있을 수 있습니다, 당신은 높은 수준의 요청을 스텁과 목표 - C에서 사용할 수 있습니다 루비로 작성된 네트워크 스텁 도구 제공된 래퍼를 사용합니다.

비동기 테스트와 관련하여 필자가 작성한 작은 유틸리티 인 AssertEventually을 살펴보십시오.

This example은 Mimic 및 assertEventually 액션을 모두 보여줍니다.

또한, Kiwi을보고 싶을 수도 있습니다. OCUnit 위에 구축 된 아주 작은 Objective-C 테스트 프레임 워크입니다. 이 식을 평가하기보다는 새로운 결과에 대한 포인터를 확인하기 때문에

id someObject = nil; 
[do SomethingThatFetchesSomeObjectAsynchronously]; 
[[theObject(&someObject) shouldEventually] equal:@"some result"]; 
+0

그것은 내가 찾고 있었던 것이다. 미믹은 꽤 재미있어 보인다. 나는 그것을 살펴볼 것이다. 고맙습니다! –

+0

AssertEventually는 유용하지만 링크가 작동하지 않습니다. 어떤 도움이 필요합니까? – AndrewCr

+0

'-shouldEventually' 동작과 함께 Kiwi를 사용하고 있습니다. 그것을 당신의 수공업이었던 것을 발견하기 위하여 공상. 감사! –

7

AGAsyncTestHelperAssertEventually보다 약간 다른 접근 방식을 취하고 : 나는 최근에 당신이 같은 일을 작성할 수 있습니다 키위에 걸쳐 포트 내 AssertEventually 행동에 패치를 기여했다. AGAsyncTestHelper을 사용하면 블록, 델리게이트 콜백 및 기타 등등을 사용할 수 있다는 장점이 있습니다. 내가 누구 전에이 일을 모르는 질문

id someObject = nil; 
[self doSomethingThatFetchesSomeObjectAsynchronously]; 
WAIT_WHILE(self.someObject == nil, 1.0);