Comment puis-je effectuer un traitement global de configuration de test qui prépare le terrain pour tous les tests lors de l'utilisation du package de test ?
A titre d'exemple dans Nunit, il y a un [SetUp]
attribut.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
Miltonb
la source
la source
Réponses:
À partir de Go 1.4, vous pouvez implémenter setup / démontage (pas besoin de copier vos fonctions avant / après chaque test). La documentation est présentée ici dans la section principale :
Il m'a fallu un certain temps pour comprendre que cela signifie que si un test contient une fonction,
func TestMain(m *testing.M)
cette fonction sera appelée au lieu d'exécuter le test. Et dans cette fonction, je peux définir comment les tests se dérouleront. Par exemple, je peux implémenter la configuration globale et le démontage:Quelques autres exemples peuvent être trouvés ici .
la source
TestMain
est une fois dans un paquet, donc ce n'est pas si utile. Je trouve que les sous - tests sont meilleurs pour des objectifs plus complexes.lstat $GOROOT/subtests: no such file or directory
Ceci peut être réalisé en mettant une
init()
fonction dans le_test.go
fichier. Cela sera exécuté avant lainit()
fonction.Le _test.init () sera appelé avant la fonction init () du package.
la source
[TestFixtureSetUp]
attribut de NUnit à la place.Étant donné une fonction simple de test unitaire:
Vous pouvez le tester avec une fonction de configuration qui renvoie la fonction de démontage. Et après avoir appelé setup (), vous pouvez faire un appel différé à teardown ().
L'outil de test Go rapportera les instructions de journalisation dans la console shell:
Vous pouvez transmettre des paramètres supplémentaires à la configuration / au démontage avec cette approche.
la source
En règle générale, les tests de go ne sont pas écrits dans le même style que les autres langages. Souvent, il y a relativement moins de fonctions de test, mais chacune contient un ensemble de cas de test basé sur une table. Consultez cet article rédigé par l'un des membres de l'équipe Go.
Avec un test basé sur une table, vous placez simplement n'importe quel code de configuration avant la boucle qui exécute les cas de test individuels spécifiés dans le tableau, et placez tout code de nettoyage par la suite.
Si vous avez toujours un code de configuration partagé entre les fonctions de test, vous pouvez extraire le code de configuration partagé dans une fonction et utiliser a
sync.Once
s'il est important qu'il soit exécuté exactement une fois (ou comme une autre réponse le suggère, utilisezinit()
, mais cela présente l'inconvénient que la configuration sera fait même si les cas de test ne sont pas exécutés (peut-être parce que vous avez limité les cas de test en utilisantgo test -run <regexp>
.)Je dirais que si vous pensez que vous avez besoin d'une configuration partagée entre différents tests qui est exécutée exactement une fois, vous devriez réfléchir si vous en avez vraiment besoin, et si un test basé sur une table ne serait pas meilleur.
la source
Le framework de test Go n'a rien d'équivalent à l' attribut SetUp de NUnit (marquant une fonction à appeler avant chaque test de la suite). Il existe cependant quelques options:
Appelez simplement votre
SetUp
fonction à partir de chaque test là où elle est nécessaire.Utilisez une extension du cadre de test de Go qui implémente les paradigmes et concepts xUnit. Trois options fortes me viennent à l'esprit:
Chacune de ces bibliothèques vous encourage à organiser vos tests en suites / fixtures similaires aux autres frameworks xUnit, et appellera les méthodes de configuration sur le type suite / fixture avant chacune des
Test*
méthodes.la source
Plug sans vergogne, j'ai créé https://github.com/houqp/gtest pour aider à résoudre exactement ce problème.
Voici un exemple rapide:
Vous pouvez créer comme n'importe quel groupe de test que vous voulez dans un package avec chacun d'eux en utilisant un ensemble différent de routines de configuration / démontage.
la source