44 votes

Comment définir la catégorie de test pour tous les tests de la classe ?

J'utilise MSTest Je veux définir la même catégorie de test pour toutes les méthodes de la classe de test en une seule fois, sans définir l'attribut TestCategory pour chaque méthode individuellement. Comment cela peut-il être fait ?

Le moyen le plus pratique et le plus évident serait de définir l'attribut TestCategory sur la classe, mais il ne peut être appliqué qu'aux méthodes.

L'objectif final est de sauter les tests d'intégration lors de l'exécution des tests sur le check-in TFS.

3 votes

Intéressant. Je ne pense pas qu'il soit possible de marquer toutes les méthodes de la classe avec un attribut en travaillant avec les tests TFS. TFS comprend TestCategory et Priority et ces attributs ne concernent que les méthodes. Vous pouvez déplacer les tests d'intégration vers un projet séparé et indiquer à TFS de ne pas les exécuter.

2 votes

Pourriez-vous séparer vos tests unitaires et d'intégration en deux assemblages différents et configurer votre construction en conséquence ?

0 votes

Eh bien, nous avons des dizaines de bibliothèques et chacune d'entre elles a une bibliothèque de tests correspondante qui peut contenir à la fois des tests unitaires et des tests d'intégration. Diviser chacune d'entre elles en une bibliothèque pour les tests unitaires et une bibliothèque pour les tests d'intégration est possible, mais ne semble pas être l'approche la plus élégante.

8voto

NomadeNumerique Points 83

Pour pouvoir définir le [TestCategory] au niveau de la classe installez le TestFramework "MSTest V2" en utilisant NuGet.

Ref: https://blogs.msdn.microsoft.com/devops/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/

5voto

jdmcnair Points 713

J'ai cherché à faire quelque chose de similaire, et je suis arrivé à une solution qui fonctionne très bien pour mes besoins.

Cela ne no résoudre le problème de l'application d'une TestCategory sur une base par classe, mais vous pouvez utiliser le /test: argument de ligne de commande pour mstest pour spécifier une chaîne de recherche qui correspondra à n'importe quelle partie de l'adresse IP. pleinement qualifié nom de la méthode du test. Cela signifie que vous pouvez généralement établir une correspondance avec la classe, l'espace de noms ou toute autre chaîne de recherche qui correspondra aux tests cibles. Et si cela ne suffit pas, vous pouvez utiliser la fonction /test: plusieurs fois. Par exemple :

> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace 
    /test:My.FullyQualified.OtherNamespace.OtherClass

Plus d'informations

Editar:

Ajout de la TestCategory au niveau de la classe est maintenant disponible avec MSTest V2, comme indiqué dans la réponse de NomadeNumerique ci-dessous. Détails

4voto

Carra Points 6832

L'objectif final est de sauter les tests d'intégration pendant l'exécution des tests sur TFS check-in.

Il existe d'autres façons de procéder. Dans vos constructions TFS, vous pouvez définir les tests unitaires que vous souhaitez exécuter, en fonction de leur nom de l'assemblage .

Le comportement par défaut est d'exécuter tous les tests unitaires dans les assemblages dont le nom contient "test". Une solution simple serait de renommer vos tests d'intégration en quelque chose qui n'inclut pas "test".


Si vous souhaitez utiliser le catégories vous pouvez essayer d'utiliser la POA. Par exemple, avec Postsharp, vous pouvez créer un aspect dans votre assemblage de test d'intégration qui met l'attribut sur la méthode . Activez ensuite l'aspect pour toutes les méthodes publiques de votre assemblage d'intégration si tous les tests sont regroupés dans une dll ou sur chaque classe de test d'intégration.

2voto

Zee Points 356

Une façon de contourner cette limitation est de placer la catégorie d'essai au début de chaque méthode d'essai. Par exemple, nommez vos tests unitaires

public void UnitTestDoSomething_ExpectThis()

et votre test d'intégration

public void IntegrationTestDoSomething_ExpectThis()

Ensuite, lorsque vous faites votre requête TFS pour obtenir les tests d'intégration, vous pouvez faire ce qui suit

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

Bien que cette solution ne soit pas parfaite, elle vous aidera à distinguer vos tests dans le code et dans TFS. Alternativement, vous pouvez regarder les chemins de zone et d'itération.

0 votes

Mais que faire avec plusieurs catégories ?

2voto

Daniele Points 1

Vous pouvez regrouper par "Nom de classe" dans le panneau Test Explorer.

Avec l'attribut TestCategory, vous ne pouvez pas résoudre votre problème, car les attributs en C# sont des méta-données et ne peuvent pas être utilisés comme valeurs dynamiques.

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