Début TDD - Défis? Des Solutions? Recommandations?
OK, je sais il y a déjà eu des questions sur mise en route avec ATS.. Cependant, je suppose que je sorte de connaître le consensus général est de juste qu'il ne , Cependant, j'ai l'impression d'avoir des problèmes pour obtenir ma tête dans le jeu:
- Lorsque l'on travaille 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?
- Quelques tests semblent prendre une éternité à mettre en œuvre.. comme lorsque l'on travaille avec la sortie de chaîne, est-il 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 petits ops et tester là-bas), 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 de Débogage.Affirmer 🙂
- Probablement le plus grand.. Parfois je ne sais pas à quoi m'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 (ce qui coûtera plus)..
Donc, fondamentalement, ce que je cherche ici n'est pas un "juste qu'il ne "mais plus" j'ai fait cela, eu des problèmes avec cela, résolu par cette ".. Le personnels expérience 🙂
Vous devez vous connecter pour publier un commentaire.
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.
Prenant le paragraphe ci-dessus à l'esprit, examinons vos questions:
Je vous ai présenté les moqueries terme dans la réponse à la première 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 y sont:
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 Développement Piloté par les tests sur pragmatic programmer.
De ma propre expérience:
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.
Il n'y a pas de 2. Regarde là-bas! Les singes!!!
NUnit est le chemin à parcourir.
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.
Mon point de vue sur ce qui suit:
Je pense que la chose la plus importante (et en fait l'un des grands résultats de la, en quelque manière 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'etat), et les choix de conception, ils encouragent (Le "Dire, ne demandez pas" principe).
J'ai trouvé que les principes illustrés dans le Trois Cartes d'Index Rappeler Facilement de l'Essence de TDD est un bon guide.
De toute façon, pour répondre à vos questions
Sérieusement, il suffit de faire ça, mec. 🙂
Je ne suis pas expert en TDD, par tout moyen, mais c'est mon point de vue:
La xUnit infrastructures de test sont souvent libres d'utiliser, donc si vous êtes un .Net guy, découvrez NUnit, et si Java est votre truc, consultez JUnit.
Les conseils ci-dessus est bonne, et si vous voulez une liste de gratuit cadres, vous avez à regarder plus loin que le xUnit Cadres de Liste sur Wikipédia. Espérons que cela aide 🙂
À mon avis (votre kilométrage peut varier):
1 - Si vous n'avez pas l'écrire ne pas le tester. Si vous l'avez écrit et que vous n'avez pas de test pour ça qu'elle n'existe pas.
3 - Comme tout le monde le dit, xUnit est gratuit et génial.
2 & 4 - de Décider exactement ce test est une de ces choses que vous pouvez débat avec vous pour toujours. J'essaie de tracer cette ligne en utilisant les principes de la conception par contrat. Découvrez "Object Oriented Construction" ou "The pragmatic programmer" pour plus de détails sur elle.
Garder des tests courts, "atomique". Test de la plus petite hypothèse pour chaque test. Faire de chaque TestMethod indépendant, pour les tests d'intégration, j'ai même créer une nouvelle base de données pour chaque méthode. Si vous avez besoin de construire des données pour chaque test, l'utilisation d'un "Init" la méthode. Mocker pour isoler la classe de test à partir de ses dépendances.
Je pense toujours à "quel est le nombre minimum de code que j'ai besoin d'écrire pour prouver cela fonctionne pour tous les cas ?"
Au cours de la dernière année, j'ai de plus en plus convaincue des avantages de l'ATS.
Les choses que j'ai apprises en cours de route:
1) d'injection de dépendance est votre ami. Je ne parle pas de l'inversion de contrôle des conteneurs et des cadres pour assembler plugin architectures, juste de passage dépendances dans le constructeur de l'objet sous test. Cette paie de retour d'énormes dividendes dans la testabilité de votre code.
2) j'ai mis avec la passion /le fanatisme de la convertir et attrapa un moqueur cadre et sur l'utilisation se moque de tout ce que je pouvais. Cela a conduit à une fragilité des tests qui demandait beaucoup de douloureux configurer et tombe dès que j'ai commencé tout de refactoring. Utiliser le bon type de test de double. Faux où vous avez juste besoin d'honorer une interface, talons de données de flux de revenir à l'objet sous test, maquette uniquement lorsque vous vous souciez de l'interaction.
3) Essai doit être de petite taille. But pour une affirmation ou d'une interaction à l'essai dans chaque test. J'essaie de le faire et surtout je suis là. C'est sur la robustesse de code de test et aussi sur le montant de la complexité dans un test quand vous avez besoin de la revoir plus tard.
Le plus gros problème que j'ai eu avec ATS a été de travailler avec un cahier des charges à partir d'un corps de normes et d'un tiers de la mise en œuvre de cette norme est la norme de facto. J'ai codé un tas de nice tests unitaires à la lettre le cahier des charges pour constater que la mise en œuvre de l'autre côté de la clôture a vu la norme en tant que plus d'un document consultatif. Ils ont joué assez lâche avec elle. Le seul moyen de résoudre ce problème est de tester avec la mise en œuvre ainsi que les tests unitaires et refactoriser les tests et le code nécessaire. Le vrai problème était la croyance de ma part que tant que j'ai eu le code et les tests unitaires tout était bon. De ne pas faire. Vous devez être la construction les sorties et l'exécution de tests fonctionnels à la même temps que vous faites des tests unitaires. De petits morceaux de bénéficier de tout le chemin à travers le processus - en utilisateurs ou parties prenantes mains.
Juste comme un complément à cela, j'ai pensé que je dirais que j'ai mis un post de blog sur mes réflexions sur la prise en main des tests (à la suite de cette discussion et de mes propres recherches), car il peut être utile pour les gens de la visualisation de ce thread.
"TDD – mise en route avec le Développement Piloté par les tests" - J'ai obtenu de bons commentaires à ce jour et voudrais vraiment l'apprécier plus que vous les gars ont à offrir.
J'espère que cela aide! 🙂