Aller au contenu

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 et t.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)
    }
}
Commande pour exécuter les tests :
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=.