Les tests unitaires locaux s'exécutent dans votre environnement sans accéder aux composants distants. App Engine propose des utilitaires de test qui s'appuient sur des mises en œuvre locales de Cloud Datastore et d'autres services App Engine.
Les services de développement simulent le comportement du service réel localement à des fins de test. Par exemple, l'utilisation du datastore indiquée dans la section Écrire des tests pour le datastore et le cache mémoire vous permet de tester le code de votre datastore, sans effectuer de requête auprès du véritable datastore. Toute entité stockée lors d'un test unitaire du datastore est stockée en local pour ensuite être supprimée après le test. Vous pouvez effectuer de petits tests rapides sans aucune dépendance sur le datastore.
Ce document explique comment écrire des tests unitaires sur des services App Engine locaux à l'aide du package testing Go.
Le package testing Go
Vous pouvez automatiser le téléchargement, la création et le test des packages Go à l'aide de l'outil goapp
. goapp
fait partie du SDK App Engine pour Go.
La commande goapp test
et le package testing
Go standard peuvent être utilisés en association pour exécuter des tests unitaires avec votre code d'application.
Pour en savoir plus sur les tests avec Go, reportez-vous à la section Testing de la page How to Write Go Code et à la documentation de référence sur le package testing.
Les tests unitaires sont contenus dans des fichiers se terminant par le suffixe _test.go
. Par exemple, supposons que vous souhaitiez tester une fonction nommée composeNewsletter
qui renvoie un objet *mail.Message
. Le fichier newsletter_test.go
suivant montre un test simple pour cette fonction :
Ce test serait appelé à l'aide de la commande goapp test
depuis le répertoire du package :
goapp test
L'outil goapp
se trouve dans le répertoire racine du SDK App Engine. Nous vous recommandons de placer ce répertoire dans la variable PATH
de votre système pour simplifier l'exécution des tests.
Package aetest
De nombreux appels de fonction aux services App Engine nécessitent un argument context.Context
. Le package appengine/aetest
fourni avec le SDK vous permet de créer un faux context.Context
pour exécuter vos tests à l'aide des services fournis dans l'environnement de développement.
L'appel à aetest.NewContext
lancera dev_appserver.py
dans un sous-processus, qui sera utilisé pour traiter les appels d'API pendant le test. Ce sous-processus sera arrêté avec l'appel à done
.
Pour plus de contrôle sur l'instance sous-jacente, vous pouvez utiliser plutôt aetest.NewInstance
. Cela vous permet de créer plusieurs contextes et de les associer à des objets http.Request
.
Lisez la documentation de référence du package aetest pour plus d'informations.
Écrire des tests Cloud Datastore et memcache
Il est facile de tester le code utilisant le datastore ou Memcache lorsque vous créez un context.Context
avec le package aetest
: dans votre test, appelez aetest.NewContext
pour créer un contexte à transmettre à la fonction testée.
L'application de démonstration transaction
dans le SDK contient un exemple de structuration de code à des fins de testabilité, et explique comment tester le code utilisant le datastore :
Ce test peut être exécuté à l'aide de la commande goapp test
:
goapp test ./demos/transaction
Les tests pour memcache suivent le même schéma : définissez l'état initial du memcache dans votre test, exécutez la fonction à tester et vérifiez que la fonction a interrogé/modifié le memcache comme vous le souhaitez.