2017-07-09 2 views
1

J'ai lu le guide de démarrage de Finatra et j'ai pu écrire le service HelloWorld et son test de fonctionnalité.Finatra FeatureTests: Comment désérialiser manuellement json retourné

Actuellement, mon test de fonctionnalité ressemble

server.httpPost(
    path = "/hi", 
    postBody = """{"name": "Foo", "dob": 136190040000}""", 
    andExpect = Ok, 
    withBody = """{"msg":"Hello Foo. You are 15780 days old today"}""") 

Cela fonctionne bien et passer mes tests. Cependant, mon exigence est que j'extrais le json retourné par le serveur et que j'effectue manuellement des assertions sur l'objet retourné.

j'ai changé mon code pour

val response = server.httpPost(
    path = "/hi", 
    postBody = """{"name": "Abhishek", "dob": 136190040000}""", 
    andExpect = Ok, 
    withBody = """{"msg":"Hello Abhishek. You are 15780 days old today"}""") 
    val json = response.contentString 

Cela fonctionne aussi et je peux voir le JSON retourné à côté de la JSON variable. Ma question est que si je dois désérialiser ce json dans un objet. Est-ce que je devrais juste tirer dans n'importe quelle bibliothèque de json comme circe? puis désérialiser l'objet?

ou puis-je utiliser le cadre jackson qui se trouve à l'intérieur de Finatra.

Dans tous les exemples que j'ai pu trouver, je vois que Finatra gère "automatiquement" la sérialisation et la désérialisation de JSON. Mais dans mon cas, je veux effectuer cela manuellement.

Répondre

1

Vous pouvez utiliser le FinatraObjectMapper en appelant (en utilisant votre exemple) server.mapper. Cela enveloppe un Jackson ObjectMapper que vous pourriez utiliser si vous vouliez utiliser la bibliothèque Jackson sans aucun add-ons Finatra.

Ou vous pouvez importer votre bibliothèque JSON différente. Si vous utilisez SBT, vous pouvez limiter les bibliothèques à certaines zones de votre code, donc si vous vouliez utiliser Circé uniquement dans le code de test, vous pouvez ajouter ce qui suit à votre build.sbt

"org.scalatest" %% "scalatest" % "2.2.6" % "test"