web-dev-qa-db-fra.com

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

J'utilise MSTest et je veux définir la même catégorie de test pour toutes les méthodes de la classe de test en même temps, 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.

Le but ultime est d’ignorer les tests d’intégration lors de l’exécution de l’essai lors de l’enregistrement TFS.

41
alex

Pour pouvoir définir l'attribut [TestCategory] au niveau class, installez le cadre de test «MSTest V2» à l'aide de NuGet.

Réf: https://blogs.msdn.Microsoft.com/devops/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/

4
NomadeNumerique

Le but ultime est d’ignorer les tests d’intégration lors de l’exécution de tests sur TFS enregistrement.

Il y a d'autres moyens de le faire. Dans vos versions de TFS, vous pouvez définir les tests unitaires que vous souhaitez exécuter, en fonction de leur nom d'assemblage.

En tant que comportement par défaut, il exécutera tous les tests unitaires dans les assemblys portant le nom "test". Une solution simple consisterait à renommer vos tests d'intégration en quelque chose qui n'inclut pas "test".


Si vous voulez utiliser categories, vous pouvez essayer d’utiliser AOP. Par exemple, avec Postsharp, vous pouvez créer un aspect dans votre test d'intégration Assembly qui place l'attribut sur la méthode . Activez ensuite l'aspect pour toutes les méthodes publiques dans votre assembly d'intégration si tous les tests sont regroupés dans une dll ou sur chaque classe de test d'intégration.

4
Carra

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

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

2
Daniele

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

public void UnitTestDoSomething_ExpectThis()

et votre test d'intégration

public void IntegrationTestDoSomething_ExpectThis()

Ensuite, lorsque vous effectuez votre requête TFS pour obtenir les tests d'intégration que vous pouvez effectuer

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

Bien que cette solution ne soit pas parfaite, elle vous aidera à distinguer vos tests en code et en TFS. Vous pouvez également consulter les chemins de zone et d'itération.

2
Zee

Dans VS 2017, cela est possible (et semble faire partie de VS2012 update 1 ).

Vous pouvez mettre [TestCategory ("Intégration")] sur une classe de votre test unitaire et l'appliquer à tous les tests, ainsi que [TestCategory ("Unité")] sur vos classes de test unitaire.

Vous pouvez ensuite utiliser la barre de recherche de l'Explorateur de tests pour filtrer par nom de caractère = unité et l'option "Tout exécuter" n'exécutera que les tests correspondant à votre recherche. 

Lorsque vous allez exécuter ces tests sur votre serveur de build, vous pouvez utiliser un commutateur du type/catégorie: Unit pour exécuter uniquement les tests unitaires.

0
Rusty Divine