2013-01-04 3 views
3

J'écris test pour une API RESTful JSON en utilisant Scalatra, un extrait ressemble suivantessai Scalatra reposant objet JSON

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") 
    } 
    } 
} 

Le corps attendu est un JSON sérialisé par Scalatra grâce à son soutien JSON. Ma question est de savoir comment puis-je convertir le corps à la même instance de classe de cas dans Scala, et de simplifier le test grandement?

Répondre

0

Je ne suis pas sûr JSON sérialiseur que vous utilisez ou la structure de vos classes d'origine, mais si vous voulez désérialiser JSON revenir à Scala, je vous recommande le module Scala Jackson:

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

Les json4s peuvent être utilisés directement pour extraire les classes de cas des valeurs JSON.
2

import org.json4s._ 
import org.json4s.jackson.JsonMethods._ 
val parsedBody = parse(body) 
parsedBody.extract[MyCaseClass] 

Vous pouvez également interroger JSON à l'aide d'expressions XPath.

val parsedBody = parse(body) 
val email = (parsedBody \ "user" \ "email").values 
email should be ("[email protected]") 

Vous pouvez appeler .values pour obtenir des valeurs Scala primitives (s String de, Int s, etc.) de JValue s (représentation interne json4s d'un document JSON).

Voir le json4s introduction pour des exemples de tous ces éléments.