Comment accéder à des classes dans une autre assemblée pour l'unité des fins de test?
Je suis les sauts dans l'unité de test de Visual Studio 2008, et je me demandais quelle est la meilleure façon d'accomplir la croix-assemblée class
l'accès à des fins de test.
En gros, j'ai deux projets en un seul solution:
- MyProject (C#)
- MyProjectTests (C# Projet De Test)
Tout en MyProject actuellement a défaut d'accessibilité, qui si je me souviens correctement signifie que tout est effectivement internal
. Je suis surtout à la recherche de test à la class
niveau, mais il y a quelques delegates
impliqués.
Il y aura probablement une API externe dans le futur, mais je suis à environ 20% de la sorte à fonctionnalité complète (au moins sur le papier) et je suis assez réticent à l'idée de la superposition de plus de code en haut de cette non testé core. En conséquence, je voudrais faire quelques essais effectués maintenant, avant que l'application est assez complet pour les traditionnelles (lire: mauvais et/ou paresseux) tests fonctionnels et certainement avant la version n+1 de l'API externe est en place.
En plus d'un droit de réponse, un exemple de la solution serait grandement apprécié.
- Pour prévenir de votre prochaine question, pourquoi le test de l'assemblée ont signé si l'essai de l'assemblée est-elle signée? -- voici mon article sur ce sujet: blogs.msdn.com/ericlippert/archive/2009/06/04/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser de l'assemblée attribut de niveau InternalsVisibleToAttribute pour atteindre cet objectif.
Ajouter
à AssemblyInfo.cs dans votre MyProject assemblée.
Vous pouvez tester les méthodes internes, par l'ajout d'un attribut à la AssemblyInfo.cs pour votre projet principal, donnant accès à des méthodes internes d'un assembly avec nom:
[assembly:InternalsVisibleTo("MyProjectTestsNameSpace.MyProjectTests")]
Plus d'info est ici
Vous devez ajouter
à AssemblyInfo.cs de votre "MyProject (C#)". Qui permet alors à vos tests d'accéder à l'intérieur des méthodes de test.
Ressemble vous avez besoin de la InternalsVisibleToAttribute
Cependant, que je recommanderais à l'égard de cette approche - tester vos classes internes via l'interface publique ou de l'API.
Bien que
[InternalsVisibleTo]
est plus sensible chemin de l'OMI, il y a au moins 2 autres façons d'aller à ce sujet:En utilisant La réflexion
Le problème avec cette approche est que si le nom de la méthode ou des changements de signature, l'unité de test va commencer à défaut au Moment de l'Exécution, alors que
[InternalsVisibleTo]
aurait facilement été ramassé cette modification de rupture au moment de la compilation.Moles /Faux
ouTypeMock
J'ai trouvé cette https://msdn.microsoft.com/en-us/library/hh598957.aspx Espère que ça peut aider quelqu'un.
Résumé: