我经常需要针对Twitter编写代码,现在还要针对我无法控制的其他Web服务API。
我尝试编写测试用例,但似乎太难了,因为:
- 我
- 被我无法控制的东西(网络服务)的速度所束缚。
- 我无法控制 Web 服务的状态(无法删除帐户、发推文和重新启动)
对于面临类似情况的人,我想找出他们设计的解决方案。
PS:我熟悉模拟对象,但我想获得更具体的经验教训 - 例如,我使用一个库与Twitter(Twitter4J)交谈,当我最后一次查看时,不允许我用模拟对象代替Twitter服务。
谢谢。
在我的项目(依赖于各种外部 Web 服务)中,我将测试重点放在失败事件上。 因此,在为 Facebook Connect 构建单元测试时,我尝试将垃圾数据传递给我的 Web 服务响应处理方法,以确保我可以处理我下面的服务更改。 成功的事件测试不是我放入单元测试的东西,因为它会产生很多麻烦(就像时间轴中的事件一样)。 解决此问题的可能方法是在预期服务中创建测试帐户,并将单元测试指向该 ID。 如果你确保你的 Web 服务发布代码不包含硬编码的 ID(我喜欢创建传递给<Service>Methods
类的<Service>Config
类,比如 FacebookMethods.auth(FacebookConfig config, String uid)
),这让我可以为操作创建一个 TestConfig,这些操作将以无法撤消或不应公开看到的方式修改服务)。