VO-09 · Les tests prouvent l’immuabilité
Signal
Des tests de value object qui ne vérifient que des getters, ou qui ne vérifient jamais qu’un appel laisse l’instance inchangée.
Pourquoi
Dans chaque test :
- Copier la valeur et vérifier que la copie est égale à l’originale.
- Appeler la fonction testée.
- Vérifier que l’originale est toujours égale à la copie.
Le test prouve alors l’absence d’effet de bord.
Ces tests servent aussi de mode d’emploi. Ils doivent avoir un sens pour les experts métier.
Exceptions
Aucune.
Correction
Copier, appeler, comparer avant et après.
Adaptation
En TypeScript, on peut aussi geler l’instance (Object.freeze) dans le test. Le corps d’une classe s’exécute en mode strict : toute écriture lance alors une erreur. Le gel est superficiel.
Voir aussi
TST-02 demande que les tests du domaine se lisent dans le langage du métier.
Exemple
ts
// euros(minor) builds a Money in EUR for the test
describe('Money', () => {
it('adds a deposit to a balance without changing either of them', () => {
const balance = euros(1_000n);
const deposit = euros(250n);
const balanceBefore = euros(1_000n);
const depositBefore = euros(250n);
expect(balance.equals(balanceBefore)).toBe(true);
const total = balance.plus(deposit);
expect(total.equals(euros(1_250n))).toBe(true);
expect(balance.equals(balanceBefore)).toBe(true);
expect(deposit.equals(depositBefore)).toBe(true);
});
});Le nom du test se lit comme une phrase du métier, et ses deux dernières lignes prouvent que plus ne touche à aucun des deux montants.