43 votes

Début TDD - Défis? Solutions? Des recommandations?

OK, je sais il y a déjà eu des questions sur la prise en main TDD.. Cependant, je suppose que je sorte de connaître le consensus général est juste de le faire , Cependant, j'ai l'impression d'avoir des problèmes pour obtenir ma tête dans le jeu:

  • Lorsque vous travaillez avec des collections, ce ne sera encore de test pour d'évidentes ajouter/supprimer/inserts de succès, même si elle se fonde sur les médicaments Génériques etc, où nous avons fait en sorte de "savoir" sa va fonctionner?
  • Certains tests semblent prendre une éternité à mettre en œuvre.. comme lorsque l'on travaille avec la sortie de chaîne, il ya une "meilleure façon" d'aller sur ce genre de chose? (par exemple, tester le modèle d'objet avant l'analyse, de briser l'analyse en petites coopératives et d'essai), Dans mon esprit, vous devriez toujours tester le "résultat final", mais qui peuvent varier énormément et être fastidieux à mettre en place.
  • Je n'ai pas un framework de test à utiliser (travail l'habitude de payer pour un) donc je peux "pratique" plus. Sont là quelques-uns qui sont gratuits pour un usage commercial? (en ce moment je suis en utilisant bon vieux Debug.Affirmer :)
  • Probablement le plus grand.. Parfois je ne sais pas à quoi s'attendre PAS à arriver.. je veux dire, vous obtenez votre feu vert, mais je suis toujours inquiète de ce que j'ai peut-être manquant un test.. Ne vous creusez plus profond pour briser le code, ou de laisser les choses se faire et attendre que tout cela tombe dessus plus tard (dont le coût sera plus élevé)..

Donc, fondamentalement, ce que je cherche ici n'est pas un " just do it ", mais plus " j'ai fait cela, eu des problèmes avec cela, résolu par cette ".. Les personnels de l'expérience :)

50voto

Dale Ragan Points 14495

Tout d'abord, il est bon et normal de se sentir frustré quand vous commencez à essayer d'utiliser TDD dans votre style de codage. Il suffit de ne pas se décourager et quitter, vous aurez besoin de donner un peu de temps. C'est un changement de paradigme majeur dans la façon dont nous pensons à propos de la résolution d'un problème dans le code. J'aime penser que c'est comme quand on est passé d'procédurale à la programmation orientée objet.

Deuxièmement, j'ai l'impression que développement piloté par les tests est d'abord et avant tout une activité de conception qui est utilisé pour la chair de la conception d'un composant par la création d'un test qui décrit tout d'abord l'API, il va exposer et comment vous allez consommer de la fonctionnalité. L'aide du test de la forme du moule et le Système Sous Test jusqu'à ce que vous avez été capable d'encapsuler suffisamment de fonctionnalités pour satisfaire quels que soient les tâches que vous arrive de travailler sur.

En prenant le paragraphe ci-dessus à l'esprit, examinons à vos questions:

  1. Si je suis en utilisant une collection dans mon système sous test, alors je vais l'installation d'une attente, assurez-vous que le code a été appelée pour insérer l'élément puis affirmer le comte de la collection. Je n'ai pas forcément de test de la méthode Add sur ma liste interne. J'ai juste assurez-vous qu'il a été appelée lorsque la méthode qui ajoute l'élément est appelé. - Je le faire en ajoutant un moqueur de cadre dans le mélange, avec mon framework de test.
  2. Les tests de chaînes de caractères en sortie peut être fastidieux. Vous ne pouvez pas en compte pour chaque résultat. Vous ne pouvez tester ce que vous attendez basé sur les fonctionnalités du système sous test. Vous devriez toujours casser vos tests, jusqu'au plus petit élément que c'est le test. Ce qui signifie que vous aurez beaucoup de tests, mais les tests qui sont petits et rapides et tester ce qu'ils devraient, rien d'autre.
  3. Il y a beaucoup de open source de test de cadres à choisir. Je ne vais pas argumenter qui est le meilleur. Il suffit de trouver celui que vous aimez et commencer à l'utiliser.
  4. Tout ce que vous pouvez faire est de configurer votre tests pour tenir compte de ce que vous voulez arriver. Si un scénario vient qui introduit un bug dans votre fonctionnalité, vous aurez au moins un test autour de la fonctionnalité à ajouter que le scénario dans le test et ensuite modifier votre fonctionnalité jusqu'à ce que le test passe. Une façon de trouver l'endroit où nous avons peut-être manqué un test est d'utiliser la couverture de code.

Je vous ai présenté les moqueries terme dans la réponse à la question. Lorsque vous introduisez les moqueries dans votre arsenal pour le TDD, il a considérablement facilite les tests d'abstraction pour les pièces qui ne font pas partie du système sous test. Voici quelques ressources sur le moqueur des cadres il y a:

Une façon de les aider dans l'utilisation de TDD, en plus de la lecture sur les processus, est de regarder les gens faire. Je vous recommande de regarder l'écran jette par JP Boodhoo sur DNRTV. Découvrez ces:

OK, ces va vous aider à voir comment les termes que j'ai présenté sont utilisés. Il présentera également un autre outil appelé Resharper et comment elle peut faciliter le processus TDD. Je ne peux que recommander cet outil assez quand vous faites TDD. Semble que vous soyez, le processus d'apprentissage et que vous êtes juste de trouver certains des problèmes qui ont déjà été résolus avec l'aide d'autres outils.

Je pense que je ferais une injustice à la communauté, si je n'ai pas de mise à jour par l'ajout de Kent Beck nouvelle série sur le Développement Piloté par les tests sur pragmatic programmer.

6voto

Matt Hamilton Points 98268

De ma propre expérience:

  1. Seulement tester votre propre code, pas le cadre sous-jacent du code. Ainsi, si vous utilisez une liste générique alors il n'y a pas besoin de tester Ajouter, Supprimer, etc.

  2. Il n'y a pas de 2. Regarde là-bas! Les singes!!!

  3. NUnit est le chemin à parcourir.

  4. Vous avez certainement ne peut pas tester tous les résultats. J'ai tester ce que j'attends d'arriver, et puis de tester quelques cas où je m'attends à obtenir des exceptions ou des réponses invalides. Si un bug vient de haut en bas de la piste en raison de quelque chose que vous avez oublié de test, la première chose que vous devez faire (avant d'essayer de corriger le bug) est d'écrire un test pour prouver que le bug existe.

2voto

Dima Malenko Points 1535

De mon point de vue sur ce qui suit:

  • +1 pour ne pas le cadre de tests de code, mais vous pouvez toujours besoin de tester les classes dérivées de classes du framework.
  • Si certaines de classe/méthode est lourde à tester peut être une forte indication que quelque chose est incorrect avec le desing. J'essaie de suivre "1 classe - 1 responsabilité, méthode 1 - 1 l'action" principe. De cette façon vous serez en mesure de tester des méthodes complexes beaucoup plus facile par le fait que dans de plus petites portions.
  • +1 pour xUnit. Pour Java vous pouvez également envisager de TestNG.
  • TDD n'est pas le seul événement c'est un processus. Donc, ne pas essayer d'imaginer tout depuis le début, mais assurez-vous que tous les bogues dans le code est couvert par le test une fois découvert.

2voto

On Freund Points 3479

Je pense que la chose la plus importante (et en fait l'un des grands résultats de la, dans un un peu récursive) TDD est la réussite de la gestion de dépendances. Vous devez vous assurer que les modules sont testés dans l'isolement, sans élaborer le programme d'installation nécessaire. Par exemple, si vous testez un composant qui envoie finalement un e-mail, faire de l'e-mail de l'expéditeur d'une dépendance, de sorte que vous pouvez vous moquer de vos tests. Cela conduit à un deuxième point on se moque de vos amis. Se familiariser avec les moqueries des cadres et le style de tests à promouvoir (comportementale, par opposition à la classique de l'état), et les choix de conception, ils encouragent (Le "Dire, ne demandez pas" le principe).

2voto

Jon Limjap Points 46429

J'ai trouvé que les principes illustrés dans les Trois Cartes d'Index Rappeler Facilement de l'Essence de l'ATS est un bon guide.

De toute façon, pour répondre à vos questions

  1. Vous n'avez pas à tester quelque chose de vous "connaître", c'est d'aller travailler, à moins que vous l'avez écrit. Vous n'avez pas à écrire des génériques, Microsoft l'a fait ;)
  2. Si vous avez besoin de faire beaucoup pour ton test, peut-être que votre objet, de méthode, est d'en faire trop.
  3. Télécharger TestDriven.NET pour démarrer immédiatement l'unité de test de Visual Studio, (sauf si c'est une édition Express)
  4. Il suffit de tester la chose correcte qui va se passer. Vous n'avez pas besoin de tester tout ce qui peut aller mal: vous avez à attendre pour vos tests à l'échec.

Sérieusement, il suffit de faire ça, mec. :)

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