database - 单元测试 Restful 网络服务

标签 database web-services unit-testing rest recess

我想知道是否有人知道对 restful web 服务进行单元测试的正确方法。我有一组使用 recess 构建的 web 服务,我想为它们编写测试代码。不幸的是,由于我的网络服务与数据库相关联,我的测试最终填充了数据库,这似乎是一个问题。

我主要问的是从单元测试的角度处理这个问题的正确方法。我是否会在测试后清除数据库中已插入的值?我有专门的测试数据库和一整套特殊的测试路线吗?对于解决这个问题的最佳方法,我有点不知所措。

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

对于处理将信息保存到数据库的测试的正确方法,我将不胜感激。

提前致谢。

最佳答案

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

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

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

您可能会发现 Rspec 作者的以下博客文章非常有帮助,因为它出色地解释了为什么您应该避免过多的模拟和 stub 。 http://blog.davidchelimsky.net/2011/09/22/avoid-stubbing-methods-invoked-by-a-framework/

关于database - 单元测试 Restful 网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7587328/

相关文章:

Android:控制数据库版本

database - 避免在 Postgres 表中有超过 1500 列

python - 为 JSON API 选择 RethinkDB 而不是传统 SQL 有多合适?

web-services - WebService 端点 url 具有 https 时的 SSL 异常

javascript - 如何在以ajax方式插入后刷新我的服务器控件?

c# - Selenium中使用FireFoxDriver时,如何知道页面Url?

php - 如何在 PHP 脚本中查找 undefined variable

java.sql.SQLException : No data found with MS Access database 异常

c# - 在方法/数据成员中对 WCF 添加限制

python - python覆盖模块可以有条件地忽略单元测试中的行吗?