Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c XCode单元测试和NSURLConnectionLegate回调?_Objective C_Xcode_Unit Testing - Fatal编程技术网

Objective c XCode单元测试和NSURLConnectionLegate回调?

Objective c XCode单元测试和NSURLConnectionLegate回调?,objective-c,xcode,unit-testing,Objective C,Xcode,Unit Testing,我正在用Xcode 5为我的项目设置单元测试。在单元测试中,我触发一些事件,这些事件将生成HTTP请求并将其发送到服务器。即使我看到正在发送请求并接收响应(通过Charles Web Proxy),但似乎没有执行来自NSURLConnectionLegate或NSURLConnectionDataDelegate的任何代码,例如 – connection:didReceiveResponse: – connection:didReceiveData: 我知道已经有很多关于单元测试异步代码的问题

我正在用Xcode 5为我的项目设置单元测试。在单元测试中,我触发一些事件,这些事件将生成HTTP请求并将其发送到服务器。即使我看到正在发送请求并接收响应(通过Charles Web Proxy),但似乎没有执行来自NSURLConnectionLegate或NSURLConnectionDataDelegate的任何代码,例如

– connection:didReceiveResponse:
– connection:didReceiveData:
我知道已经有很多关于单元测试异步代码的问题,但是我关心的是为什么我的HTTP请求被发送并接收响应,而我的委托在单元测试期间不执行回调。我已经确保测试不会在异步操作有时间完成之前完成执行


谢谢。

用一些helper方法包装您的网络代码并模拟它。您不想在单元测试中访问网络,因为:

a) 这会减慢单元测试的速度

b) 它会带来不稳定性(例如:网络或服务器宕机)


一般来说,您希望单元测试是可重复的,而在等式中引入网络只会让您头疼。获取一些好内容和一些不好内容的示例(例如:404错误或应用程序可能遇到的其他情况)。将这些数据文件放入单元测试项目中,然后让伪造的网络代码返回数据文件,而不是进行网络请求。

谢谢Nicholas。我问这个更多的是出于对技术的好奇,我读了很多关于你不应该这样做的书。只是想知道为什么从单元测试运行时,即使在测试运行时请求通过,这些委托回调也不会执行。一个可能的原因可能是您的委托被安排在与主线程关联的运行循环上(这是默认情况),您的测试方法也将在主线程上执行-一个典型的死锁。您可以通过显式调用运行循环来修复这一问题,尽管有一些微妙之处需要考虑。把这个作为答案,我会选择它。你所说的“承诺”是什么意思?ohps-错误的评论…:)我指的是这个问题:你当然可以检查我评论中的链接是否也对你有帮助;)