Test en Go (Golang) : frameworks et outils

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Test en Go (Golang) : frameworks et outils



Go (Golang) a été conçu dès le départ en tenant compte des besoins du développement moderne, c'est pourquoi la bibliothèque standard contient déjà un puissant package testing. Cependant, pour les projets complexes, des outils supplémentaires sont souvent nécessaires : mocks, assertions, style BDD et vérification des fuites de goroutines. Dans cet article, nous allons passer en revue les principaux frameworks et bibliothèques pour les tests en Go, montrer des exemples de code et expliquer quand utiliser quoi.



1. Package intégré testing



Le package standard testing est la base de tout. Les tests sont écrits dans des fichiers avec le suffixe _test.go, et les fonctions doivent avoir la signature func TestXxx(t *testing.T). Exemple :



package main

import ( "testing")

func Sum(a, b int) int { return a + b}

func TestSum(t *testing.T) { result := Sum(2, 3) expected := 5 if result != expected { t.Errorf("Sum(2,3) = %d; want %d", result, expected) }}


Exécution des tests : go test ./.... Pour les benchmarks, on utilise testing.B, pour les exemples — ExampleXxx.



2. Bibliothèque testify



Testify est la bibliothèque tierce la plus populaire pour les tests en Go. Elle fournit des assertions pratiques, des mocks et des fonctions auxiliaires.



Installation :

go get github.com/stretchr/testify


Exemple avec des assertions :

package main

import ( "testing" "github.com/stretchr/testify/assert")

func TestSumWithTestify(t *testing.T) { result := Sum(2, 3) assert.Equal(t, 5, result, "Sum should be 5") assert.NotEqual(t, 0, result) assert.True(t, result > 0)}


Testify inclut également le package mock pour créer des mocks. Exemple :

package main

import ( "testing" "github.com/stretchr/testify/mock")

// DataService — interface que nous allons mockertype DataService interface { GetData(id int) string}

// MockDataService — structure mocktype MockDataService struct { mock.Mock}

func (m *MockDataService) GetData(id int) string { args := m.Called(id) return args.String(0)}

func TestGetData(t *testing.T) { mockService := new(MockDataService) mockService.On("GetData", 1).Return("result1")

result := mockService.GetData(1) assert.Equal(t, "result1", result) mockService.AssertExpectations(t)}


3. gomock — génération de mocks



Gomock de Google est un framework pour générer des mocks basés sur des interfaces. Il fonctionne via l'utilitaire mockgen.



Installation :

go install github.com/golang/mock/mockgen@v1.6.0


Exemple d'utilisation :

//go:generate mockgen -source=service.go -destination=mock_service.go -package=main

type Service interface { Process(data string) error}

// Dans le test :func TestProcess(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish()

mockService := NewMockService(ctrl) mockService.EXPECT().Process("test").Return(nil)

err := mockService.Process("test") assert.NoError(t, err)}


Gomock est adapté aux grands projets avec de nombreuses interfaces — la génération de code fait gagner du temps.



4. ginkgo — style BDD



Ginkgo est un framework pour le Behaviour-Driven Development (BDD). Il permet d'écrire des tests dans le style "Describe", "Context" et "It".



Installation :

go get github.com/onsi/ginkgo/v2go get github.com/onsi/gomega


Exemple :

package main

import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "testing")

func TestCalculator(

Recommendations