API单元测试(测试端点与测试一切)

Ahm*_*jar 4 api unit-testing laravel-4

我们正在使用Laravel构建API,我们面临一个基本问题:

我们是否应该测试所有内容(每个模型,控制器和任何其他类中的每个方法)?或者只是测试API端点,因为测试端点意味着将测试其他所有内容,因为API端点正在使用Controller的方法,而后者又使用Model的方法!

事实上,我倾向于后者测试端点将帮助您测试其他所有内容,但我需要确保这是正确的做法.

编辑:

请考虑以下两点:

  • 测试端点意味着我必须发送HTTP请求并等待响应以查看它是否是我需要的,这对于此方法可能是非常糟糕的.
  • 测试一切意味着我必须找到一些方法来模拟laravel请求及其标题,这对于这种方法来说可能是非常糟糕的.

任何提示或评论将不胜感激.

prg*_*mtc 5

双方都存在争论和支持者.我怀疑有很多关于这个主题的意见,因为开发人员正在进行任何形式的开发人员测试.

简而言之:

  • 单元测试给您的设计带来了更大的压力.如果您在单元级别进行测试,错误代码会受到更多伤害.
  • 单元测试可以让您更准确地查明问题,因为它们可以单独测试每个工作单元.如果单元测试失败,您就知道在哪里查找问题.如果集成测试爆炸,你知道出了什么问题,但通常必须开始调试才能找到实际问题.

我喜欢Twitter用户@everzet最近使用的短语:

当它们是绿色时,所有测试看起来都一样.当它们变红时,你会看到真正的区别.

另一方面,集成测试在重构时提供更大的自由度.如果仅在API级别进行测试,则可以在不影响测试的情况下更改整个实现.如果您在单元级别进行测试,则重构可能意味着您必须更新/重写大量测试.

  • 这完全取决于您当前的环境:项目、同事开发人员的纪律/成熟度等。如果您现在问我,我肯定会在单元级别测试所有内容,并且很少有端到端测试验证系统实际上接线是否正确。这与 Cohn 的 [测试金字塔](http://martinfowler.com/bliki/TestPyramid.html) 的概念非常吻合。事实仍然是,您的测试级别越高,维护成本就越高。 (2认同)