Test des fonctions Go avec log.Fatal()
Il est courant dans les applications Go d'utiliser log.Fatal() pour enregistrer les erreurs critiques puis terminez immédiatement le programme. Bien que ce comportement soit utile dans les environnements de production, il pose des problèmes lors des tests. Voici comment vous pouvez surmonter ce défi :
Enregistreur personnalisé pour les tests
Une approche consiste à implémenter un enregistreur personnalisé qui redirige les messages de journal vers un tampon prédéfini. Cela vous permet de tester la fonctionnalité de journalisation sans que le programme ne se termine à cause de log.Fatal().
// logger.go contains a testing logger that implements *log.Logger type TestingLogger struct { b bytes.Buffer } // Println implements log.Print methods, writing to a buffer instead of stdout. func (l *TestingLogger) Println(args ...interface{}) { l.b.WriteString(fmt.Sprintln(args...)) } // String returns the buffered log messages. func (l *TestingLogger) String() string { return l.b.String() }
Exemple de test
Avec l'enregistreur personnalisé en place, vous pouvez procéder au test de la fonctionnalité de journalisation comme suit :
package main import ( "bytes" "log" "testing" ) // Set up the custom logger for testing. var logger = &logger.TestingLogger{} func init() { log.SetOutput(logger) } func TestGoodbye(t *testing.T) { // Call the function to be tested. log.Fatal("Goodbye!") // Verify the expected log message was written to the buffer. wantMsg := "Goodbye!\n" if logger.String() != wantMsg { t.Errorf("Expected: %s, Got: %s", wantMsg, logger.String()) } }
En séparant la fonctionnalité de journalisation de la fin du programme et en capturant les messages du journal dans un tampon, vous peut tester efficacement n'importe quel code qui utilise log.Fatal() sans provoquer l'échec du 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!