0

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

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

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

  • 优点:流利的api,非常容易使用它的酷DSL
  • 缺点:当我在我的 WS 上执行 POST 或 PUT 请求时,我的数据库状态被修改,并且下一个测试被破坏。

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

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

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

非常感谢。

4

3 回答 3

1

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

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

或者,您可以对 GET 和 POST/PUT 调用使用不同的双精度来确保放心,并在这些调用之间使用重定向。

于 2012-09-18T15:39:46.553 回答
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 更适合。

于 2013-01-01T16:45:58.543 回答
0

我不确定,正如您所说,您的要求是否有意义。

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

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

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

当然,你可以模拟你的后端,但要么模拟是微不足道的,而且你没有获得任何洞察力。或者它们很复杂,您将需要单独的测试以确保模拟对象与您认为它们正在做的事情一致。

于 2012-12-20T21:00:27.093 回答