2011-01-13 53 views
7

有誰知道任何現有的允許使用OCUnit測試異步代碼的庫嗎? 我正在考慮像GHAsyncTestCase之類的東西,但從SenTestCase提供。使用OCunit在iOS上測試異步代碼

我在問,因爲如果我沒有找到任何我要將端口GHAsyncTestCase端口到OCUnit,但我不想複製已經由其他人完成的工作。

+0

我不知道以前的人這樣做,但我要問;爲什麼你覺得需要在通常用於運行單元測試的框架中測試異步行爲?你不相信你的行爲的兩半?你不能單獨測試它們嗎?你真的在寫集成測試嗎? – Jonah 2011-01-13 22:51:34

+0

@Jonah,你說的對,它真的很有用,但有時我懶得模擬整個網絡層。那麼只需運行本地服務器和集成測試就可以了。 – 2011-01-14 09:11:45

回答

11

彼得:

您可能會感興趣我和Mimic所做的工作,用Ruby編寫的網絡磕碰工具,它可以讓你在存根一個高層次的要求,可以從你的Objective-C的使用使用提供的包裝。

關於異步測試,請看看我寫的一個叫做AssertEventually的小工具。

This example顯示模仿和assertEventually在行動。另外,你可能想看看Kiwi - 這是一個非常棒的Objective-C測試框架,建立在OCUnit之上。最近,我貢獻了一個補丁,端口我AssertEventually行爲獼猴桃,它可以讓你寫的東西,如:

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

AGAsyncTestHelper採用一種略微不同的方法比AssertEventually,因爲它在計算表達式,而不是檢查是否有新的結果指針。使用AGAsyncTestHelper的一個優點是它可以用於塊,委託回調等等。

WAIT_WHILE(<expression_to_evaluate>, <max_duration>); 

回答這個問題

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