2013-03-31 34 views
4

我的一些应用程序从互联网上获取数据。我开始编写单元测试的习惯,并且我怀疑如果我为从互联网返回的值编写测试,我会遇到延迟和/或可靠性问题。一个单元如何测试网络相关操作?

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

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

回答

1

我提出了这个问题上freenode.net上#macdev IRC频道德高望重的人,和我有一个很少有很好的答案。

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

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

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

1

除其他:

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

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

+0

但是,如何确保我的“成功”案件实际通过? – Moshe

2

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