我想知道是否有人知道对test风格的way服务进行单元测试的正确方法。我有一组使用recess构建的set服务,我想为它们编写测试代码。不幸的是,由于我的the服务绑定到数据库,所以我的测试最终会填充数据库,这似乎是一个问题。
我主要问的是从单元测试的角度来处理这个问题的正确方法。我是否要在测试后清除数据库中插入的值?我是否有一个包含一整套特殊测试路由的特殊测试数据库?我有点迷茫,找不到最好的方法来解决这个问题。
显然,在其他类似数据库包装类的情况下,您只需传入在测试开始时设置的虚拟数据库。然而,当涉及到使用restful框架时,这似乎更具挑战性。
对于如何正确地处理测试并将信息保存到数据库,我将非常感激。
提前谢谢。
发布于 2011-09-29 01:52:53
一般来说,你有两个选择:
1)使用具有已知数据的专用测试数据库,您可以在这些数据库上设置您的期望-在开始测试之前,将DB替换为“原始DB”。这将被认为是集成测试,因为您实际上依赖于数据库。
2.)使您的代码独立于实际的数据存储,并将依赖项传递给持久层。对于单元测试,您可以编写(或模拟出)一个自定义持久层/对象,它允许您观察正在进行单元测试的状态变化。
根据场景的不同,两者的健康组合通常可以提供良好的覆盖范围。
此外,不是测试Restful web服务,而是考虑在每个服务端点中委托一个POCO,然后直接测试这些POCO -更容易测试,剩下的就是验证服务端点和POCO之间的映射。
发布于 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/
发布于 2016-07-23 11:30:54
我的理解是,如果你按照这个顺序进行测试,你可以测试所有的动词,但最后在数据库中不会有额外的数据。
POST ( add a new record)
GET ( fetch the newly added record)
PUT/PATCH ( modify the newly added record)
DELETE (delete the newly added record) 当然,在测试期间,同时使用数据库的其他人可能会看到瞬态值。
https://stackoverflow.com/questions/7587328
复制相似问题