有誰知道任何現有的允許使用OCUnit測試異步代碼的庫嗎? 我正在考慮像GHAsyncTestCase
之類的東西,但從SenTestCase
提供。使用OCunit在iOS上測試異步代碼
我在問,因爲如果我沒有找到任何我要將端口GHAsyncTestCase
端口到OCUnit,但我不想複製已經由其他人完成的工作。
有誰知道任何現有的允許使用OCUnit測試異步代碼的庫嗎? 我正在考慮像GHAsyncTestCase
之類的東西,但從SenTestCase
提供。使用OCunit在iOS上測試異步代碼
我在問,因爲如果我沒有找到任何我要將端口GHAsyncTestCase
端口到OCUnit,但我不想複製已經由其他人完成的工作。
彼得:
您可能會感興趣我和Mimic所做的工作,用Ruby編寫的網絡磕碰工具,它可以讓你在存根一個高層次的要求,可以從你的Objective-C的使用使用提供的包裝。
關於異步測試,請看看我寫的一個叫做AssertEventually的小工具。
This example顯示模仿和assertEventually在行動。另外,你可能想看看Kiwi - 這是一個非常棒的Objective-C測試框架,建立在OCUnit之上。最近,我貢獻了一個補丁,端口我AssertEventually行爲獼猴桃,它可以讓你寫的東西,如:
id someObject = nil;
[do SomethingThatFetchesSomeObjectAsynchronously];
[[theObject(&someObject) shouldEventually] equal:@"some result"];
AGAsyncTestHelper採用一種略微不同的方法比AssertEventually
,因爲它在計算表達式,而不是檢查是否有新的結果指針。使用AGAsyncTestHelper的一個優點是它可以用於塊,委託回調等等。
WAIT_WHILE(<expression_to_evaluate>, <max_duration>);
回答這個問題
id someObject = nil;
[self doSomethingThatFetchesSomeObjectAsynchronously];
WAIT_WHILE(self.someObject == nil, 1.0);
我不知道以前的人這樣做,但我要問;爲什麼你覺得需要在通常用於運行單元測試的框架中測試異步行爲?你不相信你的行爲的兩半?你不能單獨測試它們嗎?你真的在寫集成測試嗎? – Jonah 2011-01-13 22:51:34
@Jonah,你說的對,它真的很有用,但有時我懶得模擬整個網絡層。那麼只需運行本地服務器和集成測試就可以了。 – 2011-01-14 09:11:45