Maison >développement back-end >Golang >Comment tester efficacement les fonctions Go à l'aide de « log.Fatal() » ?
Test des fonctions Go contenant log.Fatal()
Considérez un scénario dans lequel vous avez une fonction Go utilisant log.Fatal() pour imprimer messages. Tester de telles fonctions peut être difficile car log.Fatal() déclenche os.Exit(1), provoquant des échecs de test.
Approche :
Pour surmonter ce défi, il est Il est conseillé d'implémenter un enregistreur personnalisé qui redirige les sorties vers leurs destinations standard log.xxx(). Cependant, pendant les tests, vous pouvez facilement échanger des fonctions telles que log.Fatalf() avec vos propres implémentations qui n'invoquent pas os.Exit(1).
Exemple :
Supposons que nous ayons le code suivant qui imprime les journaux :
package main import ( "log" ) func hello() { log.Print("Hello!") } func goodbye() { log.Fatal("Goodbye!") } func init() { log.SetFlags(0) } func main() { hello() goodbye() }
Pour tester ce code, nous pouvons formuler des hypothèses tests :
package main import ( "bytes" "log" "testing" ) func TestHello(t *testing.T) { var buf bytes.Buffer log.SetOutput(&buf) hello() wantMsg := "Hello!\n" msg := buf.String() if msg != wantMsg { t.Errorf("%#v, wanted %#v", msg, wantMsg) } } func TestGoodby(t *testing.T) { var buf bytes.Buffer log.SetOutput(&buf) goodbye() wantMsg := "Goodbye!\n" msg := buf.String() if msg != wantMsg { t.Errorf("%#v, wanted %#v", msg, wantMsg) } }
Remarque :
Cette approche offre une flexibilité dans le remplacement de fonctions spécifiques de l'enregistreur pendant les tests, permettant une personnalisation du comportement sans affecter la fonctionnalité de la fonction d'origine en cours de test. testé.
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!