Scalatra测试restful JSON对象

时间:2013-01-04 12:16:00

标签: json scala rest scalatest scalatra

我正在使用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")
    }
  }
}

预期的 body 是由Scalatra通过其JSON支持序列化的JSON。我的问题是如何将 body 转换回scala中的相同case类实例,并大大简化测试?

2 个答案:

答案 0 :(得分:2)

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调用String来获取原始Scala值(Int s,JValue等)(JSON文档的json4s内部表示)

有关所有这些内容的示例,请参阅json4s introduction

答案 1 :(得分:0)

我不确定您使用的是哪个JSON序列化程序或原始类的结构,但如果您想将JSON反序列化为Scala,我建议使用Jackson Scala模块:

https://github.com/FasterXML/jackson-module-scala