Maison  >  Article  >  développement back-end  >  Comment rendre un objet instance disponible pour tous les tests ?

Comment rendre un objet instance disponible pour tous les tests ?

PHPz
PHPzavant
2024-02-15 17:27:111068parcourir

Comment rendre un objet instance disponible pour tous les tests ?

L'éditeur php Yuzai vous présentera comment rendre un objet instance disponible pour une utilisation dans tous les tests. Lors des tests unitaires, nous devons souvent créer un objet instance et le réutiliser dans plusieurs cas de test. Afin d'éviter la création répétée d'objets, nous pouvons créer un objet instance avant le début du test et l'enregistrer en tant que propriété de la classe en utilisant la méthode setUp(). De cette façon, nous pouvons accéder à cet objet d'instance dans toutes les méthodes de test, améliorant ainsi la réutilisabilité du code et l'efficacité des tests. Examinons ensuite la méthode de mise en œuvre spécifique.

Contenu de la question

J'écris un test de composant pour un service http. J'ai une classe d'exécuteur de tests qui contient des structures utiles et des fonctions partagées (principalement "effectuer des appels http" et "comparer les structures json"). La classe du lanceur de tests doit avoir des domaines extraits des envvars pour envoyer des appels http. Au lieu d'obtenir le domaine à partir d'une variable d'environnement à chaque fois que je fais un appel http, je préfère l'analyser une fois et le définir dans une instance de la classe d'exécution de test, puis rendre cette instance disponible pour toutes mes fonctions de test.

En supposant que la signature attendue de la fonction de test est func TestXxx(t *testing.T) {...} Comment puis-je rendre cette instance disponible pour mon test ?

Code :

  • main.go - Utilisez TestMain pour obtenir le domaine des envvars et créer une instance de la classe Test Runner
  • testrunner.go - Classes d'assistance qui facilitent les appels http et la vérification des résultats
  • tests.go - les tests en cours d'exécution. Je les convertis pour utiliser la bibliothèque de tests de Golang, mais vous pouvez voir qu'ils nécessitent actuellement un paramètre (instance de test runner)

Solution de contournement

Utilisez des variables au niveau du package pour stocker les valeurs. Initialisez la valeur dans la fonction accesseur. Utilisez sync.Once pour garantir que l’initialisation est terminée une fois.

type Helper struct {
    message string
}

var (
    helper     *Helper
    helperOnce sync.Once
)

func getHelper() *Helper {
    helperOnce.Do(func() {
        helper = &Helper{"Hello"}
    })
    return helper
}

func TestFirst(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

func TestSecond(t *testing.T) {
    h := getHelper()
    t.Log(h.message)
}

https://www.php.cn/link/50d758cc9ab8bb51177b071d370caac2

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:fonction http goFiberArticle suivant:fonction http goFiber