TDD:在测试RESTAPI控制器时,是否谨慎地在单个测试文件中测试所有操作(创建、更新、获取、删除等)?

TDD:在测试RESTAPI控制器时,是否谨慎地在单个测试文件中测试所有操作(创建、更新、获取、删除等)?,rest,unit-testing,testing,tdd,integration-testing,Rest,Unit Testing,Testing,Tdd,Integration Testing,这显然是一个实际问题。互联网智慧建议合理组织可维护性测试。对于RESTAPI控制器,可以在单个文件中包含控制器所有操作的所有集成测试 假设每个控制器有4个CRUD操作,每个操作平均有6个测试,那么一个文件中至少有24个测试。在工业级web服务器中,我怀疑这个数字会进一步上升 问题是,这些操作即使是一个类(控制器)的一部分,它们也是复杂的和正交的(测试每个组所需的不同资源/工件/模型等) 我很难接受所有这些测试都应该放在一个文件中,因为它们测试的内容几乎完全不同,可以放在4个单独的文件中。这不是更

这显然是一个实际问题。互联网智慧建议合理组织可维护性测试。对于RESTAPI控制器,可以在单个文件中包含控制器所有操作的所有集成测试

假设每个控制器有4个CRUD操作,每个操作平均有6个测试,那么一个文件中至少有24个测试。在工业级web服务器中,我怀疑这个数字会进一步上升

问题是,这些操作即使是一个类(控制器)的一部分,它们也是复杂的和正交的(测试每个组所需的不同资源/工件/模型等)

我很难接受所有这些测试都应该放在一个文件中,因为它们测试的内容几乎完全不同,可以放在4个单独的文件中。这不是更符合TDD的精神吗


我的直觉是错误的吗?

没有什么能阻止你以对你的项目有意义的方式组织你的测试

互联网智慧与此无关,做适合你的事。每个crud方法需要一个测试文件吗?那就这样做吧

测试的地点远不如实际测试的内容和方式重要

请注意,我看到人们花了很长时间测试完全错误的东西

让我们实例化控制器以从中调用方法(不要,这是非常糟糕的SOC的标志),让我们模拟谁知道是什么

如果您对应该进行单元测试的内容进行单元测试,即功能性内容、类和方法进行单元测试,您将获得更好的结果。对于API来说,这意味着业务规则、数据转换、模型转换等等

对于其余的部分,我会坚持使用集成测试,像普通用户一样调用端点,这意味着大部分是集成测试。使用诸如Postman之类的工具来组织测试集合

你可以少模拟很多东西,如果你改变你的实现细节,你的测试不会受到太大的影响,你可以在你的端点上进行测量,你可以实际测试真实的东西,一直到你的存储,再多的模拟也不会给你带来什么