Tests unitaires et benchmarks#
Introduction aux tests unitaires en Go#
- Les tests unitaires visent à vérifier le bon fonctionnement de chaque partie (unité ou fonction) d'un programme.
- Go offre une prise en charge intégrée des tests unitaires via le package "testing".
- La convention en Go est de placer les tests unitaires dans le même package que le code testé et de nommer les fichiers de test en suivant le format
<filename>_test.go
.
Utilisation du package "testing"#
- Le package "testing" fournit les outils nécessaires pour écrire des tests unitaires et des benchmarks.
- Un test unitaire en Go est une fonction qui suit le format
func TestXxx(*testing.T)
. "Xxx" doit commencer par une lettre majuscule. t.Error
ett.Fatal
sont utilisés pour signaler les erreurs.t.Fatal
arrête l'exécution du test immédiatement.
Exemple de code :
func TestAdd(t *testing.T) {
sum := Add(2, 3)
if sum != 5 {
t.Errorf("Expected 5, got %d", sum)
}
}
go test
Techniques de test : table-driven tests, mock objects#
- Les tests de type table-driven sont une approche courante en Go pour tester plusieurs scénarios à l'aide d'une seule fonction de test. Une table de cas de test est créée, puis itérée pour exécuter le test sur chaque cas.
- Les objets mock sont utilisés pour simuler le comportement de composants réels pendant les tests. Il existe diverses bibliothèques pour aider à cela, comme "testify/mock".
Exemple de code pour table-driven tests :
func TestAdd(t *testing.T) {
testCases := []struct {
a, b, sum int
}{
{2, 3, 5},
{-2, -3, -5},
{2, -3, -1},
}
for _, tc := range testCases {
if output := Add(tc.a, tc.b); output != tc.sum {
t.Errorf("Expected %d, got %d", tc.sum, output)
}
}
}
Création et exécution de benchmarks#
- Les benchmarks aident à mesurer la performance de certaines parties de votre code.
- Un benchmark en Go est une fonction qui suit le format
func BenchmarkXxx(*testing.B)
. - L'exécution d'un benchmark est effectuée à l'aide de la commande
go test -bench=.
.
Exemple de code pour un benchmark :
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(2, 3)
}
}
Commande pour exécuter le benchmark :
go test -bench=.