我正在使用
Scalatra为一些
JSON restful API编写测试,一个片段如下所示
class MyScalatraServletTests extends ScalatraSuite with FunSuite {
test("An valid request should return 200") {
get ("/rest/json/accc/B1Q4K3/1") {
status should equal (200)
body should include ("TEST")
}
}
}
预期的主体是Scalatra通过其JSON支持序列化的JSON.我的问题是如何将主体转换回scala中的相同case类实例,并大大简化测试?
最佳答案 json4s可以直接用于从JSON值中提取案例类.
import org.json4s._
import org.json4s.jackson.JsonMethods._
val parsedBody = parse(body)
parsedBody.extract[MyCaseClass]
您还可以使用类似XPath的表达式查询JSON.
val parsedBody = parse(body)
val email = (parsedBody \ "user" \ "email").values
email should be ("example@example.org")
您可以调用.values从JValues获取原始Scala值(字符串,Ints等)(json4s的JSON文档的内部表示).
有关所有这些的示例,请参见json4s introduction.