Test des scénarios os.Exit dans Go avec informations de couverture (Coveralls.io/Goveralls)
Cette question aborde les défis liés aux tests de routines qui utilisez os.Exit() dans Go tout en garantissant que les informations de couverture sont rapportées avec précision. La principale préoccupation est que les méthodes existantes, telles que la réinvocation du binaire, ne parviennent pas à suivre la couverture.
Approche modifiée pour une couverture précise
Pour remédier à cette limitation, un test modifié approche est proposée. Plutôt que de réinvoquer le binaire, les tests sont effectués en modifiant la fonction os.Exit() ou log.Fatalf() pour capturer les codes de sortie ou les journaux d'erreurs.
Modifié foo/bar.go :
package foo import ( "fmt" "os" ) var osExit = os.Exit func Crasher() { fmt.Println("Going down in flames!") osExit(1) }
Code de test modifié : foo/bar_test.go
package foo import "testing" func TestCrasher(t *testing.T) { // Save current function and restore at the end: oldOsExit := osExit defer func() { osExit = oldOsExit }() var got int myExit := func(code int) { got = code } osExit = myExit Crasher() if exp := 1; got != exp { t.Errorf("Expected exit code: %d, got: %d", exp, got) } }
Cette approche permet aux outils de couverture de suivre avec précision l'exécution de os.Exit() et garantit que les cas de test où les routines se terminent avec os.Exit() sont couverts dans les résultats des tests.
Conclusion
L'approche modifiée combine efficacement les tests avec les codes de sortie et les informations de couverture, fournissant une solution complète pour tester avec précision les scénarios os.Exit() tout en maintenant des rapports de couverture précis.
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!