首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单元测试restful风格的unit服务

单元测试restful风格的unit服务
EN

Stack Overflow用户
提问于 2011-09-29 01:44:02
回答 3查看 720关注 0票数 3

我想知道是否有人知道对test风格的way服务进行单元测试的正确方法。我有一组使用recess构建的set服务,我想为它们编写测试代码。不幸的是,由于我的the服务绑定到数据库,所以我的测试最终会填充数据库,这似乎是一个问题。

我主要问的是从单元测试的角度来处理这个问题的正确方法。我是否要在测试后清除数据库中插入的值?我是否有一个包含一整套特殊测试路由的特殊测试数据库?我有点迷茫,找不到最好的方法来解决这个问题。

显然,在其他类似数据库包装类的情况下,您只需传入在测试开始时设置的虚拟数据库。然而,当涉及到使用restful框架时,这似乎更具挑战性。

对于如何正确地处理测试并将信息保存到数据库,我将非常感激。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-29 01:52:53

一般来说,你有两个选择:

1)使用具有已知数据的专用测试数据库,您可以在这些数据库上设置您的期望-在开始测试之前,将DB替换为“原始DB”。这将被认为是集成测试,因为您实际上依赖于数据库。

2.)使您的代码独立于实际的数据存储,并将依赖项传递给持久层。对于单元测试,您可以编写(或模拟出)一个自定义持久层/对象,它允许您观察正在进行单元测试的状态变化。

根据场景的不同,两者的健康组合通常可以提供良好的覆盖范围。

此外,不是测试Restful web服务,而是考虑在每个服务端点中委托一个POCO,然后直接测试这些POCO -更容易测试,剩下的就是验证服务端点和POCO之间的映射。

票数 2
EN

Stack Overflow用户

发布于 2011-09-29 01:50:31

通常,在测试web服务时,您是在测试整个堆栈,从外到内。这意味着您请求资源并检查结果是否符合您的预期。

在几乎所有情况下,在每次请求之前填充数据库都是一种好方法。这可能看起来有点过头,但实际上,对于web服务,您无法通过模拟/存根各种元素来保证正确的测试覆盖。

来自Ruby世界的Cucumber是理想的方法,因为它可以让您从更高的层次进行测试。当您将其与Rspec结合起来进行实际的单元测试(直接查询您的对象的低级测试)时,您可以两全其美。这些库甚至附带了一个叫做“数据库清理器”的东西,它将为你管理数据库的填充和删除。

你可能会发现下面这篇Rspec作者的博客文章很有帮助,因为它很好地解释了为什么你应该避免太多的mocking和stubbing。http://blog.davidchelimsky.net/2011/09/22/avoid-stubbing-methods-invoked-by-a-framework/

票数 3
EN

Stack Overflow用户

发布于 2016-07-23 11:30:54

我的理解是,如果你按照这个顺序进行测试,你可以测试所有的动词,但最后在数据库中不会有额外的数据。

代码语言:javascript
运行
复制
POST ( add a new record)  
GET  ( fetch the newly added record)  
PUT/PATCH ( modify the newly added record)  
DELETE (delete the newly added record)  

当然,在测试期间,同时使用数据库的其他人可能会看到瞬态值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7587328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档