Pouvez-vous partager votre façon de configurer vos projets de test de l'unité dans vos solutions .NET? P>
Je peux imaginer plusieurs méthodologies possibles. Par exemple: p>
ayant une solution séparée pour les tests d'unités, reflétant parfaitement la structure de la solution de code d'origine étant testée. P> li>
Dans la solution de code d'origine, avez un dossier de solution dans lequel vous mirez parfaitement ... p> li>
dispose d'un projet de test unitaire pour chaque projet de code et de résider à côté de la structure de l'arborescence de la solution. P> li>
Un projet de test unitaire couvre plusieurs projets de code résidant aux côtés de ceux-ci dans la structure de l'arborescence. p> li> ol>
J'aimerais savoir comment vous le faites réellement dans vos solutions. P>
5 Réponses :
La structure suivante a bien fonctionné pour moi. Il maintient également le code de production et de test séparé.
\source \source\code\MainSolution.sln \source\code\Project1 \source\code\... \source\test\TestSolution.sln \source\test\TestProject1 \source\test\...
avoir la même solution pour les deux projets, mais 2 projets, le projet .NET et le projet Nunit (un à un), maintenant si j'ai une solution à plusieurs projets, je n'ai que 1 projet de Nunit pour la solution comme et 1 pour chaque projet .. Je pense que c'est un bon moyen parce que cela me sert à Mantain organisé mes projets. P>
En outre, vous pouvez regarder ce livre: http://www.artofunittesting.com/ C'est très bien. P>
Certainement une solution unique, mais des projets distincts: P>
Un projet de test par projet de production fonctionne bien pour moi. J'ai tendance à rendre l'espace de noms de noms de noms pour les tests et le code de production, ce qui signifie que vous n'avez généralement pas besoin autant d'utilisation de directives. P>
IMO, si vous souhaitez que vos tests soient faciles à exécuter, le (s) projet (s) de test doit absolument aller dans la même solution que le code de production. Tout en mettant des tests dans une autre solution peut fonctionner si tous les développeurs sont extrêmement diligents, il ajoute une barrière supplémentaire entre le changement de code de production et l'exécution des tests. J'ai tendance à préférer enlever autant de barrières que possible. P>
Il y a quelques façons différentes que vous pouvez le faire. p>
chacun a ses propres compromis que vous devez peser. p>
a du sens si toute la solution contient des projets cohérents. Si vous allez toujours développer en utilisant la même solution, il est agréable d'avoir un projet de test centralisé. p>
Cela signifie qu'il y a une surcharge réduite sur votre processus de construction (lorsque vous avez des solutions avec des scores de projets, la réduction du nombre d'assemblages réduit également le temps de construction) et il n'y a pas de surcharge de maintenance des fichiers .nunit ou similaire. p>
En outre, tout le monde sait où se passe les tests. L'inconvénient est que vous devez diviser différents projets de production en utilisant des espaces de noms et les tests d'un projet sont maintenant liés aux autres. C'est à dire. C'est le «plus facile» pour obtenir un buy-in car il y a moins à garder une trace et des développeurs peuvent facilement exécuter les tests. L'inconvénient est que dans certains cas, ce n'est pas un bon ajustement pour ce que vous développez. P>
Projet de test unique par système fort> p>
Fondamentalement identique à ce qui précède, sauf que c'est fini grainé. Vous regroupez des projets liés aux zones / systèmes et utilisez un seul ensemble de test pour chacun. Cela augmente un peu la complexité, mais signifie également que les systèmes sont plus facilement extractifs / réutilisables dans d'autres solutions. P>
a le plus de frais généraux en termes de création de nouveaux assemblys, augmente les temps de construction un peu lorsqu'il existe des charges de projets et rend généralement votre fichier de solution plus grand. Nécessite de la diligence pour toujours garder les fichiers de projet .nunit à jour et ne joue pas si bien avec les tests d'unités dans l'IDE. p>
Le côté haut est que le maintien d'un projet de test pour chaque projet de production signifie que les tests ne dépendent que de la fonctionnalité qu'ils testent (il est donc plus facile de réutiliser des projets) et de vérifier plus facilement la couverture du code par Exécution d'un projet à la fois (alors que si vous exécutez tous vos tests, vous obtiendrez une couverture plus élevée en raison de tests non liés touchant parfois le code qu'ils ne sont pas intéressés). En outre, c'est un modèle simple à suivre. Les gens vont donc comprendre où les tests sont censés aller sans problème. P>
En résumé: je pense que l'une des chances ci-dessus peut bien fonctionner en fonction de ce que vous développez, mais si vous voulez une solution «fonctionne simplement», alors je serais enclin à opter pour un mappage unique. p>
Je préfère avoir un projet de test dans la même solution que mon code source et mes tests de groupe en ajoutant des dossiers p>