Maison > Article > développement back-end > 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.
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 :
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!