一个单元如何测试依赖于网络的操作?

时间:2013-03-31 17:00:51

标签: xcode unit-testing network-programming octest

我的一些应用程序从互联网上获取数据。我养成了编写单元测试的习惯,我怀疑如果我为互联网返回的值编写测试,我会遇到延迟和/或可靠性问题。

测试“位于Web请求另一端”的数据的有效方法是什么?

我正在使用Xcode附带的库存单元测试工具包,但问题理论上适用于任何测试框架。

3 个答案:

答案 0 :(得分:3)

Unit测试专门针对您班级的业务逻辑。没有延迟,可靠性等,因为你会使用一些模拟对象来模拟你实际交互的内容 你所描述的是integration测试的某种形式,因为OP似乎不是你的意图 你应该通过模拟“模糊”另一端,而不是真正访问网络,远程数据库等。

答案 1 :(得分:1)

其中:

  • 在请求中引入人工延迟
  • 在同一网络或至少另一台VM上使用其他计算机
  • 测试连接失败(通过连接到不存在的服务器或物理切断连接
  • 测试不完整的数据(连接可以中途切断)
  • 测试重复数据(应用可能会尝试多次提交请求,如果它认为不成功 - 并且在某些情况下可能会导致数据丢失)

所有这些都应该优雅地失败(无论是在服务器端还是在客户端)

答案 2 :(得分:1)

我向freenode.net上#macdev IRC频道的老人提出了这个问题,我得到了一些非常好的答案。

Mike Ash(mikeash.com)建议在我的应用程序中实现本地Web服务器。对于复杂的情况,我可能会这样做。但是,我只是使用initWithContentsOfURL:(NSURL *)url的一些内置NSData方法。

对于更简单的情况,mike说另一种方法是将base64编码的伪数据直接传递给NSData初始化器。 (使用data://dummyDataEncodedAsBase64GoesAfterTheDataProtocolThingy。)

同样,“alistra”建议使用指向包含模拟数据的文件的本地文件URL。