Aller au contenu
Filtrer les règles par style d’implémentation
Style
Tactique
Sévérité
mineure
S’applique à
  • Tests

VO-09 · Les tests prouvent l’immuabilité ​

Style
Tactique
Sévérité
mineure
S’applique à
  • Tests

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 :

  1. Copier la valeur et vérifier que la copie est égale à l’originale.
  2. Appeler la fonction testée.
  3. 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.