8

我想使用Spec2和 Scala 来测试使用 Java 构建的 REST 服务。我查看了Spray,但看起来你必须使用 Spray 构建应用程序才能使用 SprayTest 对其进行测试。我也找到了这个线程,但这并不是我想要的。

还有其他想法吗?

4

2 回答 2

4

我们已经使用 Specs2 和 Dispatch 库 ( https://dispatchhttp.org/Dispatch.html )成功地测试了我们所有的 REST API 。Dispatch 需要一点时间来理解,但是一旦您了解了它如何将所有内容与各种运算符组合在一起,您就可以使用几行代码测试一个简单的 REST 服务。

这是最近项目中的几个测试用例:

  def issueErrorStatus = {
    val requestBody = "msisdn=447777666666&message=Some test message"
    val req = url("http://localhost:%d/otac/issue".format(port)) << 
                            (requestBody, "application/x-www-form-urlencoded")
    val response = Http.when(_ == 400)(req <:< (touchPointHeaders) as_str)
    response must_== """{"error":"Message must contain an {OTAC} place holder"}"""
  }

  def checkOtac = {
    val req = url("http://localhost:%d/otac/check".format(port)) <<? 
                                         Vector(("msisdn" -> "447777123456"))
    val response = Http(req <:< (touchPointHeaders) as_str)
    response must_== """{"status":"Present","reissueAllowed":true}"""
  }

第一个测试发出一个 post 请求,第二个测试发出一个 get 请求。我们还有一些更复杂的测试,通过 lift-json 解析器解析响应 JSON 字符串,以便我们可以更轻松地再次断言文档。上面的测试只是检查一些简单的错误/状态案例。

还有一个调度重启项目正在进行中,它有一个简化的 API 并使用异步连接。不过还不确定它有多稳定。

于 2012-05-10T12:49:35.993 回答
1

在我上一个项目中,我使用AsyncHttpClientJersey Client来测试 REST 服务,我可以推荐它们。对于异步操作,前者更好(我不知道球衣客户端是否支持异步操作)。

它们是用 Java 编写的,并且(据我所知)没有 Scala-API。

于 2012-05-10T12:36:02.517 回答