I test delle unità locali vengono eseguiti all'interno del tuo ambiente senza accedere a componenti remoti. App Engine fornisce utilità di test che utilizzano implementazioni locali di Cloud Datastore e altri servizi App Engine.
I servizi di sviluppo simulano il comportamento del servizio reale in locale per i test. Ad esempio, l'utilizzo di Datastore mostrato in Scrittura di test di Cloud Datastore e Memcache ti consente di testare il codice di Datastore senza effettuare richieste al datastore reale. Qualsiasi entità archiviata durante un test unitario del datastore viene archiviata localmente ed eliminata dopo l'esecuzione del test. Puoi eseguire test piccoli e veloci senza alcuna dipendenza dal datastore stesso.
Questo documento descrive come scrivere test delle unità per i servizi App Engine locali utilizzando il pacchetto di test Go.
Il pacchetto Go Testing
Puoi automatizzare il download, la creazione e il test dei pacchetti Go utilizzando lo strumento goapp
. goapp
fa parte dell'SDK App Engine per Go.
La combinazione del comando goapp test
e del pacchetto standard Go
testing
può essere utilizzata per eseguire test delle unità sul codice dell'applicazione.
Per informazioni di base sui test con Go, consulta la sezione Test di How to Write
Go Code e il riferimento al pacchetto
testing.
I test unitari sono contenuti in file che terminano con il suffisso _test.go
. Ad esempio, supponiamo che tu voglia testare una funzione denominata composeNewsletter
che restituisce un *mail.Message
. Il seguente file newsletter_test.go
mostra
un semplice test per questa funzione:
Questo test verrà richiamato utilizzando il comando goapp test
dalla directory del pacchetto:
goapp test
Lo strumento goapp
si trova nella directory principale dell'SDK App Engine. Ti
consigliamo di inserire questa directory nella variabile PATH
del sistema per semplificare
l'esecuzione dei test.
Il pacchetto aetest
Molte chiamate di funzioni ai servizi App Engine richiedono un context.Context
come argomento. Il pacchetto appengine/aetest
fornito con l'SDK
ti consente di creare un context.Context
fittizio per eseguire i test utilizzando i
servizi forniti nell'ambiente di sviluppo.
La chiamata a aetest.NewContext
avvierà dev_appserver.py
in un sottoprocesso,
che verrà utilizzato per gestire le chiamate API durante il test. Questo sottoprocesso verrà
arrestato con la chiamata a done
.
Per un maggiore controllo sull'istanza sottostante, puoi utilizzare aetest.NewInstance
. In questo modo puoi creare più contesti e associarli agli oggetti http.Request
.
Per saperne di più, consulta il riferimento al pacchetto aetest.
Scrittura di test di Cloud Datastore e memcache
Il test del codice che utilizza il datastore o memcache è semplice una volta creato un
context.Context
con il pacchetto aetest
: nella chiamata di test
aetest.NewContext
per creare un contesto da passare alla funzione in fase di test.
L'applicazione demo transaction
nell'SDK contiene un esempio di strutturazione del
codice per consentire la testabilità e di come testare il codice che utilizza il datastore:
Questo test può essere eseguito utilizzando il comando goapp test
:
goapp test ./demos/transaction
I test per memcache seguono lo stesso pattern: configura lo stato iniziale di memcache nel test, esegui la funzione in fase di test e verifica che la funzione abbia eseguito query/modificato memcache nel modo previsto.