J'utilise le paquet "test". Lancer mes tests comme ci-dessous.
func TestMain(m *testing.M) {
...
// Setup
os.Exit(m.Run())
// Teardown
}
Cela exécutera une configuration avant l'exécution de tout test et un démontage une fois tous les tests terminés. Et j'en ai besoin, car le programme d'installation configure le DB. Mais aussi, j'ai besoin, et pourtant, de trouver un moyen d'exécuter une configuration/un démontage par test. Pour les tests unitaires que je suis en train d'exécuter, j'aimerais effacer la base de données avant chaque test, afin d'éviter tout problème de contenu inattendu du contenu de la base de données.
Comme indiqué dans l'article " Démarrez la configuration et le démontage des tests d'unité de Kare Nuorteva , vous pouvez utiliser une fonction de configuration qui renvoie ... une fonction de démontage.
Voir ce Gist :
func setupSubTest(t *testing.T) func(t *testing.T) {
t.Log("setup sub test")
return func(t *testing.T) {
t.Log("teardown sub test")
}
}
La fonction de configuration est chargée de définir et de renvoyer celle de démontage.
Pour chaque test, par exemple dans un scénario de test basé sur une table:
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
teardownSubTest := setupSubTest(t)
defer teardownSubTest(t)
result := Sum(tc.a, tc.b)
if result != tc.expected {
t.Fatalf("expected sum %v, but got %v", tc.expected, result)
}
})
}
Vous pouvez envisager de disposer d'une table de fonctions subTestSetup, subTest et subTestTeardown qui transmet la connexion à la base de données/d'autres éléments communs dans une structure (subTestSetup peut renvoyer cette structure). Vous pouvez éventuellement réutiliser certaines parties ou certains éléments de la configuration et les supprimer dans différentes fonctions et conserver cette configuration modulaire à mesure que vos exigences de test augmentent. Appelez différer subTestTeardown () avant d'appeler le sousTest, afin de vous assurer que le code de démontage est exécuté même s'il y a un problème avec subTest.