41 votes

Comment écrire de bons tests unitaires?

Quelqu'un peut-il suggérer des livres ou du matériel de Tests Unitaires? Certaines personnes considèrent que les codes sans les tests unitaires que dans les anciens codes. Aujourd'hui, le Développement Piloté par les tests est l'approche pour la gestion de gros projets de logiciels avec la facilité. J'aime le C++ beaucoup, je l'ai appris sur ma propre sans aucune éducation formelle. Je n'ai jamais regardé dans l'Unité de Test avant, afin de se sentir délaissés. Je pense que les Tests Unitaires sont importants et pourrait être utile dans le long terme. J'apprécierais toute aide sur ce sujet.

Mes principaux sujets de préoccupation sont les suivants:

  1. Qu'est ce qu'un Test Unitaire? Est-il une liste exhaustive des cas de test qui doivent être analysées? Donc, nous permet de dire que j'ai une classe appelée "Nombres Complexes" avec certaines méthodes (permet de dit de trouver conjugué, de surcharger l'opérateur d'assignation et une surcharge opérateur de multiplication. Ce qui doit être typique des cas de test pour une classe? Est-il une méthodologie pour la sélection des cas de test?

  2. Y a des cadres qui peuvent créer des tests unitaires pour moi ou je dois écrire ma propre classe pour les tests? Je vois une option de "Test" dans Visual Studio 2008, mais n'a jamais eu de travail.

  3. Quels sont les critères pour les Unités de tests? Devrait-il y avoir un test unitaire pour chaque fonction dans une classe? Est-il judicieux d'avoir des Tests Unitaires pour chaque classe?

22voto

Ash Points 31541

Un point important (que je n'ai pas été à l'origine de la réaliser), c'est que le Test Unitaire est une technique de contrôle qui peut être utilisé par elle-même, sans avoir à appliquer l'intégralité de Tester la méthodologie.

Par exemple, vous avez un héritage de l'application que vous souhaitez améliorer en ajoutant des tests unitaires sur les zones à problèmes, ou vous trouvez des bugs dans une application existante. et d'écrire un test unitaire pour exposer le problème de code, puis le fixer. Ce sont des semi piloté par les tests, mais peuvent totalement s'intégrer avec votre actuel (non-ATS) le processus de développement.

Deux livres que j'ai trouvés utiles sont:

Développement Piloté par les tests de Microsoft .NET

Un très mains sur le Test Driven development, à la suite de Kent Becks " original TDD livre.

Pragmatique de Tests Unitaires avec C# et nUnit

Bref et pour faire le point sur ce que les tests unitaires et à la meilleure manière de l'appliquer.

En réponse à vos points:

  1. Un test Unitaire, dans la pratique, c'est une méthode unique dans une classe qui contient juste assez de code pour tester un aspect ou le comportement de votre application. Par conséquent, vous aurez souvent beaucoup de très simple de tests unitaires, chaque test sur une petite partie de votre code d'application. Dans nUnit par exemple, vous créez un TestFixture classe qui contient un certain nombre de méthodes d'essai. Le point clé est que les tests "test d'une unité" de votre code, c'est à dire un plus petit (sensible) de son unité. Vous ne testez pas le sous-jacent de l'API que vous utilisez, juste le code que vous avez écrit.

  2. Il y a des cadres qui peuvent prendre une partie de la partie la plus rébarbative de la création de classes de test, cependant je n'ai pas recommander eux. Pour créer des tests unitaires qui fait de fournir un filet de sécurité pour la refactorisation, il n'y a pas d'alternative, mais pour un développeur pour mettre la pensée en quoi et comment la tester son code. Si vous commencez à devenir dépendant sur la génération de tests unitaires, il est trop facile de les voir comme juste une autre tâche qui doit être fait. Si vous vous trouvez dans cette situation, vous faites complètement fausse.

  3. Il n'y a pas de règles simples pour combien de tests unitaires par classe, par méthode etc. Vous avez besoin de regarder le code de votre application et de faire de l'éducation de la évaluation de la complexité existe et écrire plus de tests pour ces zones. La plupart des gens commencer par tester les méthodes publiques seulement parce que ces exercent habituellement le reste des méthodes privées. Cependant, ce n'est pas toujours le cas et parfois, il est nécessaire de tester les méthodes privées.

En bref, même l'expérience de l'unité de testeurs de commencer par écrire évident de tests unitaires, alors regardez pour les plus subtiles, les tests deviennent plus claires une fois qu'ils ont écrit l'évidence des tests. Ils ne s'attendent pas à obtenir tous les tests initiaux, mais au lieu de les ajouter comme ils pensent d'eux.

7voto

Kenneth Cochran Points 7262

Même si vous avez déjà accepté la réponse à votre question, je voudrais vous recommander quelques autres livres qui ne sont pas encore parlé:

  • Travailler Efficacement avec le Code existant - Michael Plumes - pour autant Que je sais que c'est le seul livre adéquatement aborder le sujet de transformer le code existant n'a pas été conçu pour la testabilité en de code de tests. Écrit plus comme un manuel de référence, ses réparties en trois sections: Une vue d'ensemble des outils et des techniques, Une série de guides d'actualité de route commune blocs de code legacy, Un jeu de spécifique dépendance de techniques de coupure référencé dans tout le reste du livre.
  • Agile Principes, Modèles et Pratiques - Robert C. Martin - des Exemples en java, il y a une suite avec des exemples en C#. Les deux sont faciles à adapter à C++
  • Code de nettoyage:Manuel de développement Logiciel Agile de l'Artisanat - Robert C. Martin - Martin décrit cela comme une préquelle à son APPP livres et je suis d'accord. Ce livre fait un cas pour le professionnalisme et l'auto-discipline, deux qualités essentielles dans chaque développeur de logiciels.

Les deux livres écrits par Robert (Oncle Bob) Martin couvrir beaucoup plus de matériel que de simplement les tests Unitaires mais ils conduire à la maison juste combien bénéfique pour les tests unitaires peuvent être à la qualité du code et de la productivité. Je me retrouve en vous référant à ces trois livres sur une base régulière.

2voto

Mathias Points 8040

En .NET, je recommande fortement "The Art of Unit Testing" de Roy Osherove, il est très complet et plein de bons conseils.

2voto

Jerry Coffin Points 237758
  1. Avec le test driven design, vous souhaitez l'utiliser pour écrire les tests en premier. Ils devraient couvrir toutes les opérations que vous êtes réellement en utilisant/utiliser. I. e. sauf si elles sont nécessaires pour le code client à faire son travail, il ne devrait même pas exister. La sélection des cas de test est un art. Il y a des choses évidentes, comme les tests de conditions aux limites, mais en fin de compte, personne n'est trouvé un vraiment fiable, de façon systématique d'assurer que les tests (unitaires ou autre) couvrir toutes les conditions de cette question.

  2. Oui, il y a des cadres. Un couple des plus connus sont:
    Boost Unit Test Framework
    CPPUNit

    CPPUnit est un port de JUnit, de sorte que ceux qui ont utilisé JUnit précédemment trouverez probablement qu'il est à l'aise. Sinon, j'ai tendance à recommander coup de pouce-ils ont aussi une Bibliothèque de Test pour vous aider à écrire des tests individuels -- plutôt une pratique plus.

  3. Les tests unitaires doivent être suffisantes pour garantir que le code fonctionne. Si (par exemple), vous avez une fonction qui est utilisée en interne, vous n'avez généralement pas besoin de le tester directement. Au lieu de cela, vous tester tout ce que fournit l'interface publique. Aussi longtemps que qui fonctionne correctement, c'est pas des affaires du monde extérieur, comment il fait son boulot. Bien sûr, dans certains cas, il est plus facile de tester les petits morceaux, et quand il l'est, c'est parfaitement légitime-mais en fin de compte vous vous souciez de l'interface visible, pas à l'intérieur. Certainement l'ensemble de l'interface externe doit être exercé, et des cas de test généralement choisi pour exercer les chemins à travers le code. Encore une fois, il n'y a rien de différentes massivement sur les tests unitaires par rapport à d'autres types. C'est surtout une manière plus systématique de l'application normale de tests techniques.

1voto

monksy Points 8788

Je ne peux pas répondre à votre question pour Visual Studio 2008, mais je sais que Netbeans a quelques outils intégrés pour vous à utiliser.

  1. La couverture de code deux permet pour vous de voir quels chemins ont été vérifiés, et comment une grande partie du code est en fait couverte par les tests unitaires.
  2. Il a le soutien pour les tests unitaires construit en.

Quant à la qualité des tests, je suis à l'emprunt d'un peu de la "Pragmatique de Tests Unitaires en Java avec JUnit" par Andrew Hunt et David Thomas:

Les tests unitaires devriez vérifier pour les BICEPS: Boundary, Inverse relations, Cross-vérification, Error conditions, et Performance.

Également de la qualité des tests sont déterminés par UN-VOYAGE: Unutomatic, Thorough, Repeatable, j'aiindépendante, et Professional.

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