2011-01-13 29 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);