Web服务API的单元测试

时间:2014-12-16 16:23:07

标签: unit-testing continuous-integration automated-tests

首先我要说的是,这更像是一个学术问题而不是寻求工具集或第三方产品的问题。它的目的是让我们深入了解开发人员在使用时使用的各种方法/方法。为他们的apis创建单元测试。

采用一个场景......一个api,它接受一个请求对象并返回一个响应对象 - 一个相对简单的方法定义,一个我们都熟悉的方法。

现在该api的内部工作涉及与底层数据库和其他依赖Web服务api的交互。在本质上;这个api充当各种聚合器,这个api的功能取决于数据库的存在和其他Web服务的可用性。因此,它是一个相对复杂的api,具有大量可能的程序流程。

我认为这种情况不是唯一的;所以我希望就如何测试这样的api提出一些建议。

2 个答案:

答案 0 :(得分:1)

这是依赖注入成为你朋友的场景。在依赖注入模式变得非常流行之前,许多人会交换数据访问层和Web服务之类的接口实现,这实际上是面向对象的接口变得强大的地方。话虽如此,我认为dependency injection wiki在解释这个方面做得很好。希望这能让你开始。

答案 1 :(得分:1)

我采取了几种不同的方法:

烟雾测试:

  • 这是一种运行状况检查,以确保服务可以启动各种连接,并且您可以执行基本操作,例如成功点击端点。

集成测试:

  • 提供服务,理想情况下使用迁移工具和一组固定装置或工厂构建数据库。如果您可以使用Vagrant或类似的东西从头开始构建堆栈,那么奖励积分。
  • 使用查询字符串排列命中每个端点并测试响应。
  • 您也可以使用像Siege这样的东西对端点进行基准测试。

单元测试:

  • 模拟与服务的所有连接,或使用依赖注入将它们替换为可测试版本,即sqlite,内存缓存等......
  • 点击执行除简单CRUD操作以外的其他操作的端点。
  • 点击有条件地从堆栈的不同部分提取信息的端点;即缓存,数据库等,以测试这些规则是否有效。

每个人都有自己的偏好,但我通常更喜欢专注于集成测试来测试实际的端点。为这些端点供电的服务模型和ORM / ODM模型通过单元测试进行测试。如果时间不是一个因素,你可以对所有内容进行单元测试。