我想知道是否有人知道对 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/