0Pricing
Go Academy · Leçon

Doublures d’essai : mocks et stubs

Interfaces pour faciliter les essais et injection de dépendances

Doublures d’essai : mocks et stubs est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Présentation des doublures d’essai

Une doublure d’essai remplace une dépendance réelle dans les essais. Types : bouchon (renvoie des réponses prédéfinies), simulacre (vérifie les interactions), espion (enregistre les appels), faux objet (implémentation fonctionnelle en mémoire).

Les interfaces permettent les doublures d’essai

Concevez les fonctions pour qu’elles acceptent des interfaces plutôt que des types concrets. En production, fournissez l’implémentation réelle ; dans les essais, fournissez une doublure d’essai.

type UserStore interface {
    FindByID(id int) (*User, error)
}

func GetUser(store UserStore, id int) (*User, error) {
    return store.FindByID(id)
}

Bouchon manuel

Un bouchon est une structure simple qui implémente une interface et renvoie des valeurs préconfigurées :

type stubStore struct{ user *User; err error }
func (s *stubStore) FindByID(_ int) (*User, error) { return s.user, s.err }

// In test:
store := &stubStore{user: &User{Name: "Alice"}}
result, _ := GetUser(store, 1)

Simulacre manuel

Un simulacre enregistre les appels et effectue des assertions à leur sujet :

type mockStore struct {
    called bool
    gotID  int
    user   *User
}
func (m *mockStore) FindByID(id int) (*User, error) {
    m.called = true; m.gotID = id
    return m.user, nil
}
// Assert: if !mock.called { t.Error(...) }

testify/mock

Le package testify/mock génère ou écrit des objets simulés avec des attentes d’appel et une configuration des valeurs de retour :

type MockStore struct { mock.Mock }
func (m *MockStore) FindByID(id int) (*User, error) {
    args := m.Called(id)
    return args.Get(0).(*User), args.Error(1)
}
// In test:
m := new(MockStore)
m.On("FindByID", 1).Return(&User{}, nil)
m.AssertExpectations(t)

gomock

go.uber.org/mock/gomock (anciennement golang/mock) génère des simulacres à partir d’interfaces. Utilisez le CLI mockgen pour les générer ; utilisez EXPECT() pour définir les attentes.

Faux objet

Un faux objet est une implémentation fonctionnelle en mémoire. Par exemple, un magasin d’utilisateurs en mémoire qui stocke les utilisateurs dans une map. Les faux objets sont plus longs à écrire, mais plus réalistes et moins fragiles que les simulacres.

type fakeStore struct{ users map[int]*User }
func (f *fakeStore) FindByID(id int) (*User, error) {
    u, ok := f.users[id]
    if !ok { return nil, ErrNotFound }
    return u, nil
}

httptest pour les clients HTTP

net/http/httptest fournit un serveur HTTP d’essai en processus et un enregistreur : c’est la doublure standard pour les dépendances fondées sur HTTP.

ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    json.NewEncoder(w).Encode(User{Name: "Alice"})
}))
defer ts.Close()

Quand utiliser chaque doublure

Bouchon : réponse fixe simple. Simulacre : vérification du nombre d’appels et des arguments. Faux objet : comportement complexe. Évitez la simulation excessive : les faux objets et les composants réels dans les essais d’intégration sont plus fiables.

Éviter les essais fragiles

Les simulacres qui vérifient l’ordre exact des appels ou les valeurs exactes des arguments deviennent fragiles à mesure que l’implémentation évolue. Préférez si possible les bouchons avec assertions sur les sorties ou les faux objets.

Découverte des interfaces

Extrayez les interfaces après avoir identifié la surface du type concret utilisée par les appelants (ISP). Go prend en charge la satisfaction implicite des interfaces : aucune modification du type concret n’est nécessaire.

Vérification rapide

Quelle est la principale différence entre un bouchon et un simulacre ?

Récapitulatif : doublures d’essai

Points clés :

  • Concevoir avec des interfaces pour permettre les doublures d’essai
  • Bouchon : renvoie des données prédéfinies ; simulacre : vérifie les interactions
  • httptest pour HTTP ; faux objets en mémoire pour le stockage
  • Éviter la simulation excessive : préférer les faux objets pour les comportements complexes

Questions Fréquemment Posées

La leçon « Doublures d’essai : mocks et stubs » est-elle gratuite ?

Oui — le texte complet de « Doublures d’essai : mocks et stubs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Doublures d’essai : mocks et stubs » ?

Interfaces pour faciliter les essais et injection de dépendances Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Doublures d’essai : mocks et stubs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Écrire des essais unitaires avec testing
  2. Essais pilotés par table
  3. Doublures d’essai : mocks et stubs
  4. Couverture des essais et testify
← Retour à Go Academy