2010-05-17 18 views
6

Ho un metodo di controllo, come ad esempio:Unità testando un metodo di controllo?

def search = { 
    def query = params.query 

      ... 

    render results as JSON 
} 

Come posso unit test questo? In particolare, come si chiama la ricerca per impostare params.query e come si verificano i risultati del metodo render? C'è un modo per deridere il metodo di rendering, forse?

risposta

5

Sottoclasse grails.test.ControllerUnitTestCase per i test dell'unità. Grails crea automaticamente un'istanza del controller e simula versioni di rendering e reindirizzamento che ti consentono di testare facilmente i risultati. Basta assegnare gli ingressi di test a controller.params per impostare il test.

Esempio:

class SomethingController { 
    def search = { 
     def query = params.query 
     ...stuff... 
     render results as JSON 
    } 
} 

Il test si presenta come:

class SomethingControllerTests extends grails.test.ControllerUnitTestCase { 
    void testSearch() { 
     controller.params.query = "test query" 
     controller.search() 
     assertEquals "expected result", controller.response.contentAsString 
    } 
} 

Nota: è possibile utilizzare ControllerUnitTestCase per i test di integrazione troppo, se avete bisogno di un ambiente completo di completa integrazione con il database.

0

Ci sono due modi per testare il controller, ma richiederà alcune modifiche.

Il primo è testare il controller stesso, senza aggiungere la complessità dell'analisi HTTP, in modo da scrivere il test dell'unità e passare il parametro params.query come parte del test dell'unità, quindi dividere la funzione di ricerca in due funzioni:

def search = { 
    def query = params.query 
    render realSearch(query) as JSON 
} 

def realSearch ... 

Quindi, la prima parte prova realSearch.

Quindi la seconda parte è scrivere un'applicazione che si connetterà effettivamente alla tua applicazione Web e fare un test funzionale, che testerà l'intera applicazione, incluse le parti del controller che non sono state testate nella prima parte .

0

TFM: Grails ref chapter 9

seguire l'esempio testCreateWithJSON() ... solo roba la stringa di query in params [ 'query'], impostare il contentType, di ricerca di chiamata(). Dal momento che stai chiamando esplicitamente il rendering, la cosa più esosa sarebbe guardare response.contentAsString ... Probabilmente farei semplicemente asserzioni di pattern-match sul contenutoAsString; potresti ri-analizzare come JSON e quindi esaminare quell'albero di oggetti, ma sospetto che non sarà chiaro/veloce come semplici asserzioni di pattern-match.

Problemi correlati