Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在测试RESTful服务时,我是否也应该检查数据层?_Unit Testing_Testing_Tdd_Integration Testing - Fatal编程技术网

Unit testing 在测试RESTful服务时,我是否也应该检查数据层?

Unit testing 在测试RESTful服务时,我是否也应该检查数据层?,unit-testing,testing,tdd,integration-testing,Unit Testing,Testing,Tdd,Integration Testing,测试端点的结果是直接的 但是,如果(即)我发布的数据保存正确,我不应该也查看一下数据库层吗?我不清楚REST调用背后的业务逻辑应该如何测试。是的,您应该在某个点测试db层,但可能不是在测试端点结果的单元测试中 在单元测试级别,您希望进行小型/快速/独立的测试,因此您可能会得到一个针对其余部分的测试/套件,以及另一个针对db层的测试/套件。 然后您可能会有更多的集成/端到端测试来检查整个系统:执行请求并检查数据库是否正确更新 我自己作为QA的经验是,涉及DB的测试是由QA使用第三方工具(我们用于此

测试端点的结果是直接的


但是,如果(即)我发布的数据保存正确,我不应该也查看一下数据库层吗?我不清楚REST调用背后的业务逻辑应该如何测试。

是的,您应该在某个点测试db层,但可能不是在测试端点结果的单元测试中

在单元测试级别,您希望进行小型/快速/独立的测试,因此您可能会得到一个针对其余部分的测试/套件,以及另一个针对db层的测试/套件。
然后您可能会有更多的集成/端到端测试来检查整个系统:执行请求并检查数据库是否正确更新

我自己作为QA的经验是,涉及DB的测试是由QA使用第三方工具(我们用于此)从功能角度通过集成/端到端测试完成的。

在我的完美世界中(有一天我想住在那里…)在完全验证我提供的RESTful服务时,有几个不同的测试

应用程序的每个逻辑层都有单元测试,使用依赖项注入模拟下一个较低的层,并验证每个单元是否正常工作。这可能是一个封送/解封送参数和响应的单元,一个执行业务逻辑的单元,以及一个管理持久性的单元。(可能有多个单元,每个单元的每一层都有自己的测试。)这些测试在测试框架之外没有依赖关系,但持久性层除外,它必须执行您的持久性实现


还有需要运行系统的集成测试。这是调用正在运行的服务并验证是否得到预期响应的地方。您还可以检查通话的副作用。在我的团队中,我们通常会根据第一次呼叫的结果进行不同的服务呼叫。这将更多地锻炼系统。我们发现,直接检查持久化层的副作用很少能告诉我们使用不同的服务调用无法获得的信息。

一种方法是使用restful服务本身来测试数据是否正确持久化

例如,您可以使用PUT消息来持久化一个实体,并使用GET操作来检索它,并确保所有属性都相等。这更像是一个涵盖端到端的集成测试


尤其是您的应用程序正在执行更多的CRUD操作,如果使用这种方法,您可以避免为每个层(如存储库)创建测试。

REST调用不是真正意义上的“端到端”测试吗?当然。我从测试人员的角度使用它,试图传达这样一种想法:对于这种测试,我们不仅要检查服务器返回的JSON,还要检查系统其他部分的预期结果(例如“在该数据库的这个表中添加了一个用户”)