163 votes

Mettez-vous des tests unitaires dans le même projet ou un autre projet ?

Mettez-vous des tests unitaires dans le même projet pour des raisons pratiques ou vous les mettez dans un assembly séparé ?

Si vous les mettez dans un assembly séparé, comme nous le faisons, nous nous retrouvons avec un certain nombre de projets supplémentaires dans la solution. C’est formidable pour tout en codage de tests unitaires, mais comment vous libérer l’application sans tous ces assemblys supplémentaires ?

134voto

Jon Skeet Points 692016

Autre projet, mais dans la même solution. (J'ai travaillé sur des produits avec des solutions distinctes pour le test et le code de production - c'est horrible. Vous êtes toujours à la commutation entre les deux.)

Les raisons pour des projets distincts sont comme indiqué par d'autres. Notez que si vous utilisez des données piloté par les tests, vous pourriez vous retrouver avec une quantité importante de ballonnement si vous incluez les tests de la production de l'assemblée.

Si vous avez besoin d'accès à l'interne, les membres de la production de code, utilisez InternalsVisibleTo.

117voto

Jason Jackson Points 11563

À mon avis, les tests unitaires doivent être placés dans un ensemble distinct de code de production. Voici quelques-uns des inconvénients de la passation de tests unitaires dans la même assemblée ou des assemblées que le code de production sont les suivants:

  1. Les tests unitaires sont expédiés avec le code de production. La seule chose livrée avec le code produit est le code de production.
  2. Les assemblages seront inutilement gonflé par les tests unitaires.
  3. Les tests unitaires peuvent affecter le processus de génération comme automatisée ou l'accumulation continue.

Je ne sais pas vraiment de pros. Avoir un autre projet (ou 10) n'est pas un con.

Edit: Plus d'Infos Sur l'assemblage et l'Expédition

Je tiens à recommander que tout processus de génération automatique de lieu de production et les tests unitaires dans différents endroits. Idéalement, le test de l'unité de construire processus ne s'exécute que si le code de production s'appuie, et copie les fichiers du produit dans les tests unitaires répertoire. Cette façon de faire des résultats dans les bits séparés pour l'expédition, etc. En outre, il est assez trivial pour exécuter des tests unitaires automatisés, à ce moment, tous les tests dans un répertoire particulier.

Pour résumer, voici l'idée générale pour un quotidien de construire et d'essai et de navigation de bits et d'autres fichiers:

  1. La Production de construire des pistes, en plaçant les fichiers de production dans une "production" de répertoire.
    1. Construire des projets de production seulement.
    2. Copie compilé bits et d'autres fichiers dans une "production" de répertoire.
    3. Copie de bits et d'autres fichiers dans une version release candidate répertoire, aka un Noël répertoire de sortie serait "Release20081225".
  2. Si la production de construire réussit, l'unité de test de construire des pistes.
    1. Copiez le code de production pour les "essais" de répertoire.
    2. Construire des tests unitaires pour les "essais" de répertoire.
    3. Exécuter des tests unitaires.
  3. Envoyer des notifications construire et tests unitaires des résultats pour les développeurs.
  4. Quand une release candidate (comme Release20081225) est acceptée, navire de ces bits.

22voto

jenspo Points 56

Mettre les tests Unitaires dans le même projet que le code de parvenir à une meilleure encapsulation.

Vous pouvez facilement tester les méthodes internes, ce qui signifie que vous avez l'habitude de faire des méthodes publiques qui devraient avoir été interne.

Aussi, il est vraiment agréable d'avoir les tests unitaires près le code que vous avez écrit. Lorsque vous écrivez une méthode que vous pouvez facilement trouver le correspondant de tests unitaires parce que c'est dans le même projet. Lorsque vous créez une assemblée qui comprend unitTests, toutes les erreurs dans le unitTest vous donnera une compilereerror, de sorte que vous devez garder votre unittest à jour, il suffit de construire. Ayant unittest dans un autre projet, peut causer certains développeurs oublier la construction de la unittest-projet, et il manque des tests cassés pendant un certain temps.

Et vous pouvez supprimer les tests unitaires à partir de la production de code, en utilisant la compilation des balises (SI #de Débogage).

Automatique de Tests d'Intégration (en fait je NUnit) doit être dans un autre projet, car ils n'appartiennent pas à un seul projet.

12voto

tvanfosson Points 268301

Mes tests unitaires toujours aller dans un autre projet. En fait, pour chaque projet que j'ai dans ma solution, il existe un projet de test qui va avec. Test de code n'est pas le code de l'application et ne doit pas être mêlé à ça. Un avantage pour les garder dans des projets distincts, au moins à l'aide de TestDriven.Net -- c'est que je peux cliquer à droite sur un projet de test et exécuter tous les tests de ce projet, le test d'un ensemble de la bibliothèque de code de l'application avec un seul clic.

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