Mocking vs Stubbing

Testing 🟡 Mid

Definition

Le stub fournit des reponses predefinies sans verifier les appels. Le mock verifie en plus que les interactions attendues ont bien eu lieu (nombre d'appels, arguments).

Analogie

Le stub est un distributeur automatique (il donne la reponse), le mock est un serveur de restaurant qui note ce que vous commandez ET verifie que vous avez bien commande.

Exemple de code

// Stub : on ne verifie pas l'appel
vi.spyOn(api, 'fetch').mockReturnValue({ data: 'ok' });

// Mock : on verifie l'interaction
const sendEmail = vi.fn();
await registerUser('alice@mail.com');
expect(sendEmail).toHaveBeenCalledWith('alice@mail.com');
expect(sendEmail).toHaveBeenCalledTimes(1);

Cas d'usage

Utiliser des stubs pour les queries (get data) et des mocks pour les commands (send email, write DB).

Anti-pattern

Sur-mocker en verifiant chaque appel interne, couplant les tests a l'implementation plutot qu'au comportement.

Termes lies

#testing#interview#fondamental