我想使用Spec2和Scala来测试使用Java构建的REST服务。我看了Spray,但是接缝就像你必须使用Spray构建你的应用程序,以便使用SprayTest测试它。我也找到了this thread,但这并不是我想要的。
还有其他想法吗?
答案 0 :(得分:4)
我们已成功使用Specs2和Dispatch库(https://dispatchhttp.org/Dispatch.html)测试了所有REST API。调度需要花费一点时间来解决问题,但是一旦你理解了它与各种操作符一起组成所有内容,你就可以用几行代码测试一个简单的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并与异步连接一起使用。不确定它到底有多稳定。
答案 1 :(得分:1)
在我的上一个项目中,我使用AsyncHttpClient和Jersey Client来测试REST服务,我可以推荐它们。对于异步操作,前者更好(我不知道是否是泽西客户端 完全支持异步操作。
它们是用Java编写的,并且(据我所知)没有Scala-API。