Objective c 使用OCMockito对NSURLConnection sendAsynchronousRequest进行单元测试

Objective c 使用OCMockito对NSURLConnection sendAsynchronousRequest进行单元测试,objective-c,unit-testing,objective-c-blocks,ocmockito,Objective C,Unit Testing,Objective C Blocks,Ocmockito,我正在努力为一个API包装器编写一个单元测试,它的接口如下 -(void)发布:(id)请求完成处理程序:(void(^)(id,NSError*)完成块 它在引擎盖下调用此方法: NSURLConnection sendAsynchronousRequest:queue:completionHandler 我不想改用委托,因为公开的API更适合sendAsynchronousRequest方法(并且不需要每个请求都有一个单独的累加器对象)。此外,我在代码的其余部分使用OCMockito进行

我正在努力为一个API包装器编写一个单元测试,它的接口如下

-(void)发布:(id)请求完成处理程序:(void(^)(id,NSError*)完成块
它在引擎盖下调用此方法:

NSURLConnection sendAsynchronousRequest:queue:completionHandler
我不想改用委托,因为公开的API更适合sendAsynchronousRequest方法(并且不需要每个请求都有一个单独的累加器对象)。此外,我在代码的其余部分使用OCMockito进行模拟,它不支持部分模拟或模拟类方法


是否有其他测试技术可以测试此功能?是否需要改用委托?

使用基于委托的API。我意识到它需要更多的代码,但便利API显然不足以满足您的需求(即,可以使用OCMockito进行模拟)。此外,不要担心每个请求分配一个辅助请求的“开销”。我很有信心,通过调用
+[NSURLConnection sendaynchronousrequest:queue:completionHandler://code>,系统框架中会有几十个对象在幕后被分配;你不应该担心。也就是说,一个对象可以是多个请求的委托,因此不必有多个。

OCMockito支持类方法。哦,真的吗?如何使用OCMockito模拟类方法?我在自述文件或示例中没有看到它
今天早上尝试了基于委托的API,只要我让它在主队列上立即启动,它就可以正常工作。当我使用一个新队列时,会发生一些其他事情(立即开始:NO,setDelegateQueue,start)。但我想这是另一个问题。这里不要说得太“明显”,但在初始化之后,您是否使用
scheduleinrunlop:forMode:
在runloop上调度它否则它将永远不会启动,因此您的委托方法将永远不会被调用。