2011-08-17 13 views
6

Voglio testare il mio webservice assicurato al seguente:prova RESTful JSON Grails Webservice

  • UrlMapping corretto, lo sono anche i seguenti servizi disponibili o no?
  • test GET/POST/PUT/DELETE e il loro feedback reso così come gli errori dei messaggi di errore
  • prova quando connesso e non connesso

qualcuno mi può dare qualche suggerimento su come fare questo? Non ho idea di come sia possibile accedere al servizio di sicurezza Grails e di eseguire test contro i miei controllori quando si accede e quando no. Inoltre, ho bisogno di un server Mock o qualcosa da testare contro i miei controller o?

Scusa Sono molto nuovo su questo argomento ma voglio andare nella giusta direzione prima di perdere il controllo sui miei servizi web.

Grazie per il vostro aiuto!

risposta

7

Utilizziamo il plugin REST Client insieme al plugin functional testing per testare tutti i nostri servizi web.

Per esempio ...

void testCreateTag() { 
    def name = 'Test Name' 
    def jsonText = """ 
     { 
      "class":"Tag", 
      "name":"${name}" 
     } 
     """ 

    post('/api/tag') { 
     headers['x-user-external-id'] = securityUser.externalId 
     headers['x-user-api-key'] = securityUser.apiKey 
     headers['Content-type'] = 'application/json' 
     body { 
     jsonText 
     } 
    } 

    def model = this.response.contentAsString 
    def map = JSON.parse(model) 

    assertNotNull(map.attributes.id) 

    Tag.withNewSession { 
     def tag = Tag.get(map.attributes.id) 

     assertNotNull(tag) 
     assertEquals(name, tag.name) 
    } 
} 
0

Ho codice simile che utilizza il built in (Groovy 1.8) JsonSlurper che credo potrebbe essere più affidabile e ha bisogno solo il plugin test funzionale, ma non il plugin client REST .

String baseUrlString = 'http://localhost:8080/**YOURAPP**' 

    baseURL = baseUrlString 

    post('/j_spring_security_check?') 

    assertStatus 200 
    assertContentDoesNotContain('Access Denied') 

    get("/*your test URL*/") 

    def jsonObj = new JsonSlurper().parseText(this.response.contentAsString) 
    assertEquals(jsonObj.your.object.model, **yourContent**)