29 votes

Que faites-vous tester avec des tests unitaires?

TDD est quelque chose qui semble être sur toutes les lèvres ces jours-ci, et j'ai essayé sur mon propre mais je ne pense pas que je suis de l'idée. Je suis obtenir une poignée sur la façon d'écrire un test unitaire, mais je ne comprends pas exactement ce que mes tests unitaires doivent de test.

  1. Si j'ai une méthode d'action qui renvoie une liste de données, que dois-je vérifier? Seulement que le nom de la vue est correct, ou devrais-je vérifier les données ainsi?
  2. Si je dois tester les données, ainsi, ne vais-je pas être d'écrire le même code deux fois? Qu'est-ce que l'utilisation des tests les données, si j'utilise la même méthode pour récupérer les données, je suis en comparant?
  3. Dois-je tester les méthodes d'ajout/modification de mes données? Comment faire pour vérifier si un enregistrement a été ajouté/modifié/supprimé, dans une manière correcte?

Je sais que c'est beaucoup de grandes questions, mais je ne suis pas devenu plus sage de lire les articles sur l'internet, ils ont tous l'air d'être concerné par la façon de tester, et pas avec quoi.

Comme un exemple - j'ai (ou, vais écrire) une GuestbookController, avec les méthodes de visualisation, ajout, la modification et la suppression de postes. De quoi ai-je besoin de le tester? Comment dois-je faire?

26voto

Steven A. Lowe Points 40596

Les Tests unitaires (UT) != Conception dirigée par les tests (TDD)

Cette confusion semble être assez commun. UT est tout au sujet de la couverture de code. TDD est concerné avec des fonctionnalités. Ils sont pas la même chose [désolé Joel!]

Avec UT, vous écrivez le code que vous voulez, puis revenir en arrière et de tester chaque fonction (même certains de la insignifiants).

TDD, vous sélectionnez l'option et écrire le test de cette fonctionnalité première. Écrire seul le test de cette fonctionnalité, et la couverture de test est hors de propos. Vous écrivez le test de la première à la force de l'interface de prise de décisions à l'avant. Ensuite, vous écrivez le code pour passer le test (en gardant à l'esprit la "chose la plus simple que peut éventuellement travailler"). Ensuite, vous refactoriser le code en fonction de ce que vous avez appris. Ensuite, vous passez à la prochaine caractéristique (sans doute après le check-in et de ré-exécuter tous les tests unitaires).

Si vous le souhaitez, développer en utilisant TDD puis revenir en arrière et une couverture complète avec UT outils. Si vous êtes à la création d'une bibliothèque de classe ou d'autres API pour les développeurs, plus de la couverture de test, mieux c'est ;-)

Si vous êtes en train d'écrire une application pour faire cinq choses spécifiques, TDD seul devrait suffire.

4voto

Jeffrey Fredrick Points 3531

Je pense qu'il y a un peu de Shu-Ha-Ri ici. Vous vous posez une question qui est difficile à expliquer. C'est seulement après la pratique et de la difficulté à appliquer TDD que vous obtiendrez le Ce que. Jusqu'alors, nous allons vous donner des réponses qui n'ont aucun sens, en vous disant des trucs conformément à l'esprit de Monades Sont des Burritos. Qui ne sera pas vous aider, et nous allons le son comme des idiots (les monades sont clairement citron mousseline de soie de la tarte).

Je vous recommande d'entrer Kent Beck TDD livre et de travailler à travers elle, et puis il suffit de pratiquer. "Il n'y a pas de voie royale pour la Ri."

3voto

jturcotte Points 767

Tester le contrat de l'interface du module que vous souhaitez tester:

  • Si un client pourrait s'attendre à un comportement spécifique lors de l'utilisation de votre classe, de le tester.
  • Si votre classe doit prévenir certains comportements de la part du client, telles que définies dans son contrat, le tester.

Par client, je veux dire le code qui utilisent votre classe.
Par un comportement normal, je veux dire le résultat attendu d'une méthode sur les valeurs de retour et les états d'objet.

Et concentrez vos tests sur la logique (if, for, while, etc.), parce que plat des trucs comme propriétés ont moins de chances d'échouer sans se faire attraper par un usage normal de votre application.

1voto

JohnIdol Points 16355

Ce sont des lignes directrices générales que je trouve très utiles pour les tests unitaires:

1) Identifier un objet-Frontière (Win/WebForms, CustomControls etc).

2) Identifier les Objets de Contrôle (objets de couche de gestion)

3) assurez-vous d'Écrire des tests Unitaires au moins pour les objets de contrôle public des méthodes invoquées par un objet-frontière.

De cette façon, vous serez sûr que vous êtes couvrant les principaux aspects fonctionnels (fonctions) de votre application et vous ne courez pas le risque de micro-test (sauf si vous voulez).

1voto

Esko Luontola Points 53877

En TDD vous rédigez les spécifications des systèmes de comportements et de les utiliser pour orienter la conception du système. Vous écrivez un essai pour un petit comportement, puis de regarder le test à l'échec, et ensuite écrire le code pour passer le test. À tout moment, vous gardez le code de qualité aussi élevée que possible par refactoring régulièrement, ainsi que de faire plus de changements est plus facile.

Des exemples de la façon de faire TDD: http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata

Voir aussi ma réponse à partir de http://stackoverflow.com/questions/507000/writing-standards-for-unit-testing/510996#510996 - il a des exemples et des liens pour plus d'informations. Ici sont aussi de bons liens à suivre: http://code.google.com/p/instinct/wiki/UsersGuide

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