97 votes

Devrait-il être "Arrange-Affirmer-Loi-Valoir"?

Concernant le test classique motif d' Organiser la-Loi-Valoir, il m'arrive fréquemment de l'ajout d'une contre-affirmation qui précède la Loi. De cette façon, je sais que le passage de l'assertion est vraiment passer comme le résultat de l'action.

Je pense à elle comme analogue à la rouge-rouge-vert-refactoriser, où seulement si j'ai vu la barre rouge dans le cours de mes essais, je sais que la barre verte signifie que j'ai écrit le code qui fait une différence. Si j'écris un test de passage, puis tout code de la satisfaire; de même, à l'égard des dispositions qui Affirment-Loi-Valoir, si ma première assertion échoue, je sais que tout Acte aurait passé la dernière Affirmer - ce donc que ce n'était pas réellement vérifier quelque chose au sujet de la Loi.

Faites vos tests de suivre ce modèle? Pourquoi ou pourquoi pas?

Mise à jour Précisions: la première assertion est essentiellement l'inverse de la dernière affirmation. Ce n'est pas une affirmation que d'Organiser travaillé; c'est une affirmation que la Loi n'a pas encore travaillé.

129voto

Mark Seemann Points 102767

Ce n'est pas le plus fréquent, mais encore assez commun d'avoir son propre nom. Cette technique est appelée la Garde de l'Assertion. Vous trouverez une description détaillée à la page 490 dans l'excellent livre xUnit des Modèles de Test par Gérard Meszaros (fortement recommandé).

Normalement, je n'utilise pas ce modèle moi-même, car je trouve ça plus correct d'écrire un test spécifique qui valide quelle que soit la condition je ressens le besoin de s'assurer. Un tel test doit toujours échouer si la condition d'échec, et cela signifie que je n'ai pas besoin intégrée dans tous les autres tests. Cela donne une meilleure isolation des préoccupations, car un cas de test ne vérifie qu'une seule chose.

Il peut y avoir beaucoup de conditions préalables qui doivent être remplies pour un cas de test, de sorte que vous mai besoin de plus d'un Garde de l'Assertion. Au lieu de répéter ceux dans tous les essais, d'en avoir un (et un seul) de test pour chaque condition maintient votre code de test plus mantainable, puisque vous aurez moins de répétition de cette façon.

32voto

Ole Lynge Points 2176

Il pourrait également être spécifié en tant que dispositions enAssumer la-Loi-Valoir.

Il ya une poignée de techniques pour cette NUnit, comme dans l'exemple ici: http://nunit.org/index.php?p=theory&r=2.5.7

8voto

Carl Manaster Points 23696

Voici un exemple.

public void testEncompass() throws Exception {
    Range range = new Range(0, 5);
    assertFalse(range.includes(7));
    range.encompass(7);
    assertTrue(range.includes(7));
}

Il se pourrait que j'ai écrit Range.includes() de simplement retourner la valeur true. Je n'ai pas, mais je peux imaginer ce que je pourrais avoir. Ou je pourrais l'avoir écrit mal dans un certain nombre d'autres façons. Je voudrais espérer que TDD j'ai effectivement eu le droit qu' includes() seulement des œuvres, mais peut être que je n'ai pas. Si la première affirmation est un test de cohérence, de sorte que la seconde assertion est vraiment significatif.

Lire par lui-même, assertTrue(range.includes(7)); dit: "affirmer que la modification de gamme comprend 7". Lu dans le contexte de la première affirmation, il dit: "affirmer que l'invocation d'englober() provoque à 7. Et depuis englober est l'unité que nous sommes en train de tester, je pense que c'est de quelques (petites) de la valeur.

Je suis l'acceptation de ma propre réponse; beaucoup d'autres mal interprété ma question à propos de test de la configuration. Je pense que c'est un peu différent.

1voto

Dave W. Smith Points 9470

Jeter dans une "santé mentale vérifier l'assertion" pour vérifier l'état avant d'effectuer l'action que vous effectuez le test est une technique ancienne. J'ai l'habitude de les écrire comme test de l'échafaudage pour me prouver que le test n'est ce que j'attends, et de les supprimer plus tard, pour éviter d'encombrer les tests avec le test de l'échafaudage. Parfois, laissant l'échafaudage en aide le test de servir en tant que récit.

1voto

philant Points 17345

J'ai déjà lu à propos de cette technique - peut-être de vous btw - mais je ne l'utilise pas; surtout parce que je suis habitué à la triple Un formulaire pour mes tests unitaires.

Maintenant, je suis curieux, et avoir quelques questions: "comment écrivez-vous votre test, ne vous cause cette affirmation à l'échec, à la suite d'un rouge-vert-rouge-vert-refactoriser le cycle, ou avez-vous l'ajouter par la suite ?

Avez-vous échoue parfois, peut-être après vous refactoriser le code ? Qu'est-ce que vous dites ? Vous pourriez peut-être donner un exemple où il a aidé. Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X