4

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

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

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

4

3 回答 3

3

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

于 2013-03-31T17:08:12.330 回答
1

其中:

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

所有这些都应该正常失败(在服务器端或客户端)

于 2013-03-31T17:07:21.643 回答
1

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

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

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

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

于 2013-03-31T17:40:28.503 回答