如何对依赖网络的操作进行单元测试?

5

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

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

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

3个回答

3

单元测试专注于您的类的业务逻辑。您将使用某些模拟对象来模拟您实际交互的内容,因此不会有延迟、可靠性等问题。
您所描述的是某种形式的集成测试,对于OP来说似乎并不是您的意图。
您应该通过模拟来“遮蔽”另一端,并且不要真正访问网络、远程数据库等。


2
我在 #macdev IRC 频道上向尊敬的人们提出了这个问题,并得到了一些非常好的答案。Mike Ash (mikeash.com 的作者) 建议在我的应用程序内部实现一个本地 Web 服务器。对于复杂的情况,我可能会这样做。然而,我只是使用了一些内置的 NSData 的 initWithContentsOfURL:(NSURL *)url 方法。对于简单的情况,Mike 建议使用将基于 Base64 编码的虚拟数据直接传递给 NSData 初始化器的替代方法。(使用 data://dummyDataEncodedAsBase64GoesAfterTheDataProtocolThingy.) 同样,"alistra" 建议使用指向包含模拟数据的文件的本地文件 URL。

1

其中包括:

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

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


但是我如何确保我的“成功”案例实际上通过了呢? - Moshe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接