API 单元测试(测试端点与测试一切)
API Unit Testing (Test Endpoints vs. Test Everything)
我们正在使用 Laravel 构建 API,我们面临一个基本问题:
我们是否应该测试所有内容(每个模型、控制器和任何其他 class 中的每个方法)?或者只测试 API 端点,因为测试端点意味着将测试其他所有内容,因为 API 端点正在使用 Controller 的方法,而后者又使用 Model 的方法!
事实上,我倾向于后者,即测试端点将帮助您测试其他所有内容,但我需要确保这是正确的做法。
编辑:
考虑以下两点:
- 测试端点意味着我必须发送一个 HTTP 请求并等待响应以查看它是否是我需要的,这对于这种方法来说可能是非常糟糕的。
- 测试所有内容意味着我必须找到一些方法来模拟 laravel 请求及其 headers,这可能对这种方法来说非常糟糕。
如有任何提示或意见,我们将不胜感激。
双方都有争论和支持者。我怀疑关于这个主题的意见与进行任何形式的开发人员测试的开发人员一样多。
简而言之:
- 单元测试会给您的设计带来更大的压力。如果您在单元级别进行测试,糟糕的代码会造成更大的伤害。
- 单元测试可以让您更准确地查明问题,因为它们会单独测试每个工作单元。如果单元测试失败,您知道在哪里寻找问题。如果集成测试失败,您就知道出了什么问题,但通常必须开始调试才能找到真正的问题。
我喜欢 Twitter 用户 @everzet 最近使用的短语:
When they're green, all tests look the same. It's when they're red you
see the real difference.
另一方面,集成测试在重构时提供了更多的自由度。如果您仅在 API 级别进行测试,则可以更改整个实现而不影响您的测试。如果您在单元级别进行测试,重构可能意味着您必须 update/rewrite 大量测试。
我们正在使用 Laravel 构建 API,我们面临一个基本问题:
我们是否应该测试所有内容(每个模型、控制器和任何其他 class 中的每个方法)?或者只测试 API 端点,因为测试端点意味着将测试其他所有内容,因为 API 端点正在使用 Controller 的方法,而后者又使用 Model 的方法!
事实上,我倾向于后者,即测试端点将帮助您测试其他所有内容,但我需要确保这是正确的做法。
编辑:
考虑以下两点:
- 测试端点意味着我必须发送一个 HTTP 请求并等待响应以查看它是否是我需要的,这对于这种方法来说可能是非常糟糕的。
- 测试所有内容意味着我必须找到一些方法来模拟 laravel 请求及其 headers,这可能对这种方法来说非常糟糕。
如有任何提示或意见,我们将不胜感激。
双方都有争论和支持者。我怀疑关于这个主题的意见与进行任何形式的开发人员测试的开发人员一样多。
简而言之:
- 单元测试会给您的设计带来更大的压力。如果您在单元级别进行测试,糟糕的代码会造成更大的伤害。
- 单元测试可以让您更准确地查明问题,因为它们会单独测试每个工作单元。如果单元测试失败,您知道在哪里寻找问题。如果集成测试失败,您就知道出了什么问题,但通常必须开始调试才能找到真正的问题。
我喜欢 Twitter 用户 @everzet 最近使用的短语:
When they're green, all tests look the same. It's when they're red you see the real difference.
另一方面,集成测试在重构时提供了更多的自由度。如果您仅在 API 级别进行测试,则可以更改整个实现而不影响您的测试。如果您在单元级别进行测试,重构可能意味着您必须 update/rewrite 大量测试。