DEVLOPN Audit

verify(mock.method()) — le test vert qui laissait passer un double appel

En Mockito, verify sans .called(1) explicite peut rester vert alors que la méthode part deux fois. Pourquoi la précision dans les tests protège le lecteur.

Pendant longtemps j'ai écrit verify(mock.method()) en pensant que .called(1) était la valeur par défaut.

Puis Michael en review : « tu vérifies quoi exactement là ? »

Et là, gros doute.

Verify ou called(1) ? Ton test passe au vert, vérifie-t-il vraiment ce que tu crois ? Sois précis, mets called(1)

Le bug sous le radar

verify(mock.method()) était vert alors que la méthode partait deux fois. Le bug est passé sous le radar.

Sans .called(1) explicite, le test vérifie seulement que l'appel a eu lieu au moins une fois — pas qu'il a eu lieu exactement une fois. Un double appel (double requête réseau, double écriture) passe sans broncher.

La leçon

Le code se lit dix fois plus qu'il ne s'écrit. Sois précis pour le lecteur, et pour toi-même.

// Ambigu : vert même si la méthode part 2 fois
verify(mock.method());

// Explicite : échoue si l'appel n'est pas unique
verify(mock.method()).called(1);

Et toi, tu mets .called(1) explicite ou pas ?