Question

Où mettre les tests unitaires vous pour des réceptions privées dans les classes C #?

article dans Wikipedia indique:

  • Mettre les tests dans la même classe que les membres qu'ils testent
  • Utilisation des classes partielles

Personnellement, aucune de ces méthodes semblent appropriées, et je préfère de beaucoup avoir des tests unitaires situés dans un projet tout à fait distincte.

Les réflexions sur ce sujet?

(Je sais qu'il ya une bonne quantité de débat pour savoir si les méthodes privées devraient être testés à tous. Je voudrais entendre les deux côtés de l'argument.)

Était-ce utile?

La solution

Les méthodes privées ne doivent pas nécessairement être testé directement. Vous pouvez déterminer leur validité sur la base des tests de méthodes publiques qui utilisent ces méthodes privées.

Cependant, vous devez prendre soin de vous assurer que vos méthodes publiques peuvent facilement injecter des dépendances simulacres dans vos méthodes privées pour faciliter les tests et simuler tous les scénarios raisonnables.

Modifier Quant à savoir où vos autres tests doivent se trouver, je vous propose un sous-répertoire distinct au sein de votre projet pour gérer vos tests. Lors de l'écriture des tests pour les applications PHP, j'ai un répertoire Tests dans la racine de mon projet dont la structure répertoire est identique à celle de ma vraie structure de répertoire d'applications. Dans ce document, j'ai une classe de test pour chaque classe réelle.

Il suffit de ne pas compiler vos classes de test avec le reste de votre projet lors de la publication à la production (ou dans le cas d'une langue interprétés à comme PHP, ne déployez pas les classes de test au serveur web de production).

Autres conseils

Ne pas des méthodes privées de tests unitaires. Les tests unitaires sont pour tester l'interface visible (si public et protégé) d'une classe. Les méthodes privées sont des détails de mise en œuvre et les tests unitaires d'écriture pour eux est inutile (leur comportement doit être testé implicitement par les tests sur les méthodes visibles), conduit à des tests fragiles (comme les détails de mise en œuvre pourrait changer) et constitue un obstacle à refactoring.

Si vous avez une méthode privée que vous sentez que vous avez besoin de test unitaire, qui est un indice important que peut-être il devrait être factoriser dans une méthode publique sur une autre classe.

  

Où mettre les tests unitaires vous pour des réceptions privées dans les classes C #?

Nulle part. Ils n'existent pas.

En général, mes tests unitaires sont dans des projets séparés.

Je tiens personnellement à des tests unitaires dans un projet distinct. Si vous voulez tester l'unité une méthode privée, vous pourriez faire la méthode privée au lieu interne. Vous pouvez alors faire des méthodes internes visibles à vos tests unitaires pour appeler directement en ajoutant ce qui suit à AssemblyInfo.cs:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Vous devez faire ce qui fonctionne pour vous; voici ce qui fonctionne pour moi:

Mon unité est une classe : c'est ce que je suis en train de tester. Pas une méthode. Je suis en train de faire de la programmation orientée objet, donc je mis mon attention sur les objets.

Si je me trouve tenté de tester une méthode privée, je dois refactor . Je veux seulement tester une méthode privée directement parce qu'il ya trop d'autres codes entre elle et les essais, et parce que la méthode privée elle-même est assez complexe pour besoin d'attention de test. Donc, je vais généralement extrait de classe pour tirer cette méthode privée, et d'autres membres apparentés dans une nouvelle classe.

Mes cours ont tendance à être tout à fait petit . Ils sont faciles à lire et à comprendre. Mes méthodes, bien sûr, sont aussi très petit et facile à comprendre.

La transition vers cette façon de me ouvraison requise repenser beaucoup de mes hypothèses et habitudes sur la programmation. Ce qui a semblé radicale semble désormais banal.

Je suis d'accord que les méthodes privées ne doivent pas être testées, en général, parce que vous ne devez tester les interfaces publiques.

Cela étant dit, il y a des raisons pour lesquelles vous pourriez vouloir tester des méthodes privées:

  1. Vous utilisez TDD, et vous devez développer une méthode complexe privé. Création de méthodes d'essai pour la méthode privée peut être nécessaire de garder votre écriture test- écrire du code -. Cycle de test à la granularité droite

  2. Vous pouvez faire partie d'une équipe où les autres peuvent avoir besoin de modifier la méthode privée, et que vous voulez des tests afin d'assurer que les changements ne créent pas de problèmes.

Quelques solutions:

  1. Déclarer des méthodes qui sont publiques que délégué à la méthode privée et sont utilisés uniquement à des fins de test. Celles-ci pourraient être préfixées par exemple avec TestFoo1, TestFoo2 etc.

  2. Utilisation interne

http://msdn.microsoft.com/ fr-fr / bibliothèque / 7c5ka91b (VS.80) .aspx

Le titre de votre question et la première phrase sont différentes. :)

Je ne suis pas sûr où placer vos tests. Cela dépend de la langue et C # est pas quelque chose que je connais, mais j'imagine qu'une partie importante de votre code est à l'intérieur des méthodes privées. Je me sentirais mal à l'aise si cela n'a pas été testé. la couverture du code baisserait un peu.

Nous utilisons des accesseurs privés dans Visual Studio pour tester des méthodes privées. Cela signifie que que les classes de test peuvent vivre dans un projet distinct.

Cependant, nous essayons de limiter vraiment le nombre de ceux-ci parce que:

  • une méthode privée qui se suffit à lui peut être tiré comme une méthode publique dans une autre classe
  • méthodes privées qui ne font rien particulièrement utile en dehors de la classe peuvent être testés par les méthodes publiques de cette catégorie

oui, absolument. méthodes privées doivent être testés de toute façon. et MbUnit cadre de test unitaire peut accéder à un membre privé.

voir ce blog: tester des méthodes privées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top