测试RESTful服务,我还应该检查数据层吗?

时间:2014-04-08 08:45:27

标签: unit-testing testing tdd integration-testing

测试端点的结果是直截了当的。

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

3 个答案:

答案 0 :(得分:1)

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

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

还有集成测试需要正在运行的系统。这是您调用正在运行的服务的位置,并验证您是否获得了预期的响应。您还可以检查呼叫的副作用。在我的团队中,我们经常通过进行依赖于第一次呼叫结果的不同服务呼叫(或呼叫)来做到这一点。这锻炼了更多的系统。我们发现直接检查持久层的副作用很少告诉我们,我们无法使用不同的服务调用。

答案 1 :(得分:0)

是的,您应该在某个时刻测试数据库层,但可能不在测试端点结果的单元测试中。

在单元测试级别,您希望进行小型/快速/独立测试,这样您最终可能会得到REST部件的测试/套件以及另一个侧重于数据库层的测试/套件。
然后,您可能会有更多的集成/端到端测试来检查整个系统:执行请求并检查数据库是否已正确更新。

我自己作为QA工作的经验是,涉及数据库的测试是通过QA使用第三方工具进行集成/端到端测试以及功能视角完成的(我们使用Robot Framework为此)。

答案 2 :(得分:0)

这样做的一种方法是使用restful服务本身来测试数据是否正确持久,

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

特别是您的应用程序正在执行更多CRUD操作,如果您使用此方法,则可以避免为每个层(例如存储库)创建测试