php - 为 REST-ful API 编写单元测试

标签 php unit-testing rest

<分区>

我正计划为 REST-ful API 编写单元测试,我想知道我应该采用的方法。

我最关心的方面与数据库状态有关。我的理解是,测试目标的环境或初始状态对于每个测试应该是相同的,这意味着数据库对于每个测试也应该是相同的。当我有一个繁重的数据库时,我该如何实现?另外,我如何处理数据库架构中的任何更改?

最佳答案

问题是你想测试什么。您认为什么会在最顶层的 api 层(即接收 HTTP 请求的层)中断?

通常编写单元测试 restful-api 听起来有点矛盾;)根据定义,单元测试比使用入口点 HTTP 到数据库要小得多。听起来您的问题更多是基于如何编写大型测试(或验收、端到端测试)。

请注意,实现此类大型测试(端到端测试)需要付出很大的努力:

  • 测试往往要慢得多
  • 测试的维护成本,因为测试更难理解(因为所有这些依赖项 + 测试数据设置)
  • 它们更容易导致假阳性测试(测试显示“红色”,但它应该是“绿色”)。再次的原因是您的测试中涉及更多的依赖关系,脆弱性更有可能。

根据我的经验,测试粒度的多样性为王,因此我混合/组合方法:

  • api 内部的单元测试(例如,几个更复杂的映射要求、身份验证、棘手的验证规则、复杂的 if/else 逻辑,...)
  • 正在做 smoke-tests在更粗粒度的层面上,HTTP 客户端正在与 api 对话,即测试集成。这些测试会告诉我:服务器可以启动,主要的 api 用例可以工作。作为工具我推荐soap-ui .
  • 关于数据库状态:我通常从最基本的数据开始(例如现有的 api 用户或预定义的不可变测试数据)。应隔离每个测试的测试数据。如果我的测试包含更复杂的流程(例如,整个用例分布在多个 HTTP 调用上),则允许测试数据依赖于测试步骤(即 call-2 可能依赖于通过调用更改的服务器状态- 1)

也许您可以针对要测试的特定用例提供更多意见,以便提供更多帮助?

关于php - 为 REST-ful API 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380903/

相关文章:

c# - 如何使用 Moq 来满足单元测试的 MEF 导入依赖?

PHP/MYSQL 高级搜索脚本。如何?

php - 纠正装饰者模式的一大缺点

reactjs - React Jest - 意外的 token 导入

iOS:如何在设备上运行 XCTest?

python - 使用python从netsuite获取和推送数据

rest - 为什么flutter拒绝在本地主机上连接:8000 or 127. 0.01 :8000?

android - 如何在android中调用Restful web服务

php - 在PHP中递归创建多维数组

混帐/ Mercurial : Separate repos in structure