如何在不修改数据库状态的情况下在我的WS上使用rest-assured进行集成测试?

时间:2012-08-19 13:41:10

标签: rest spring-mvc integration-testing rest-assured

我目前正在使用Spring MVC开发REST Web服务。

我正在努力寻找在我的WS上进行集成测试的最佳方法。

第一种解决方案:使用放心

  • 优势:流畅的api,非常易于使用酷炫的DSL
  • 缺点:当我在WS上执行POST或PUT请求时,我的数据库状态被修改,接下来的测试被破坏。

第二种解决方案:对控制器进行单元测试,并在服务级别单独执行集成测试

  • 优点:我可以使用Spring Test Framework控制数据库的状态,并在每次测试后执行回滚
  • 缺点:我不再进行端到端集成测试了。

问题:如何在不修改数据库状态的情况下使用rest-assured进行集成测试?

非常感谢。

3 个答案:

答案 0 :(得分:1)

为什么不在每次测试之前删除放心的双打和重定向,并将它们重新设置为测试?

    RestClient.delete "#{RestAssured::Server.address}/redirects/all"
    RestClient.delete "#{RestAssured::Server.address}/doubles/all"

或者你也可以使用不同的双打对GET进行GET和POST / PUT调用,并在这些调用之间使用重定向。

答案 1 :(得分:0)

我不确定,你提出的要求是有道理的。

RestAssured只是一个支持测试的框架。您还可以编写单元测试,它相当于PUT和DELETE(基本上是内部实现),然后修改数据库状态。

或者您只能使用RestAssured发出HEAD和GET请求,而不能通过此修改数据库状态。

如果您保留任何更新,这两个选项都只会测试部分代码路径,因此您的问题与RestAssured或手写单元测试的选择是正交的。

当然,你可以嘲笑你的后端,但要么嘲笑是微不足道的,你没有获得任何洞察力。或者它们很复杂,你需要进行单独的测试,以确保模拟对象符合你的想法。

答案 2 :(得分:0)

为了在REST Spring MVC Web服务上执行集成测试,SpringSource团队提供了一个名为spring-test-mvc的新库,该库现已集成到spring-test中。

http://blog.springsource.org/2012/11/12/spring-framework-3-2-rc1-spring-mvc-test-framework/

出于我的特殊目的,它比Rest-Assured更适应。