Nunit: Attribut personnalisé qui combine Catégorie et Répétition

Créé le 30 nov. 2017  ·  5Commentaires  ·  Source: nunit/nunit

Brève explication de ce que je veux réaliser :

Je veux un attribut personnalisé nommé "CandidateTest" qui définit un nom de catégorie ainsi qu'un attribut Repeat pour ce test, afin que je n'aie pas à utiliser le Repeat séparément sur mon test.

La raison pour laquelle je veux faire cela est que nous avons un travail "StressTester", qui exécute tous les tests avec cette catégorie 50 fois chacun et le test devrait réussir toutes les 50 exécutions.
Cela nous aide à comprendre les tests irréguliers avant de supprimer l'attribut et de les laisser s'exécuter avec notre ensemble de tests normal.

Le problème ici est que je ne peux pas comprendre comment définir une catégorie ainsi que définir la répétition (50).

Comment j'ai essayé de faire :

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class CandidateTestAttribute : CategoryAttribute, ITestAction
{
    public CandidateTestAttribute() : base("CandidateTests")
    {
    }

    public void BeforeTest(ITest test)
    {
        TestContext.CurrentContext.Test.Properties.Set("Repeat", 50);
    }

    public void AfterTest(ITest test)
    {
        // do nothing
    }

    public ActionTargets Targets { get; private set; }
}

mais il semble que la définition de la valeur de répétition dans BeforeTest soit trop tardive pour que NUnit soit pris en compte.

Je l'ai également essayé dans l'autre sens = CandidateTest est dérivé de RepeatAttribute et pour définir la catégorie, mais la catégorie ne semble pas être prise en compte lors de l'exécution des tests

Des suggestions de votre part sur la façon d'y parvenir?Ou y a-t-il peut-être même une possibilité d'obtenir une sorte d'attribut StressTester de NUnit à l'avenir ?

done question

Tous les 5 commentaires

Je l'ai également essayé dans l'autre sens = CandidateTest est dérivé de RepeatAttribute et pour définir la catégorie, mais la catégorie ne semble pas être prise en compte lors de l'exécution des tests

Cela me semble définitivement être une meilleure solution - RepeatAttribute contient beaucoup plus de logique que vous auriez besoin de réimplémenter - ce que vous n'avez pas fait dans votre exemple ci-dessus. Vous auriez besoin d'à peu près tout ici .

Pouvez-vous partager comment vous avez tenté cela dans l'autre sens? Qu'est-ce qui vous a donné l'impression que la catégorie n'a pas été prise en compte ?

ITestAction n'est pas une interface adaptée à votre objectif. Il effectue des actions avant et après le test, ce qui n'est pas ce que vous essayez de faire.

Parce que la répétition est l'attribut le plus compliqué, j'en dériverais et j'ajouterais le comportement de Category.

L'attribut de répétition est déjà dérivé de l'attribut de propriété, il dispose donc d'un dictionnaire de propriétés auquel vous pouvez ajouter la valeur de catégorie que vous souhaitez utiliser.

Je vais clore cette question car nous ne l'implémenterions pas dans NUnit lui-même. Si vous rencontrez des difficultés, n'hésitez pas à continuer de poster ici, nous verrons cela. Je vous suggère de regarder le code des attributs Repeat et Category pour avoir une idée de ce qu'ils font.

https://github.com/nuni/nuni/blob/master/src/NUnitFramework/framework/Attributes/RepeatAttribute.cs
https://github.com/nuni/nunit/blob/master/src/NUnitFramework/framework/Attributes/CategoryAttribute.cs

Merci @ChrisMaddock et @CharliePoole pour vos suggestions et idées !
J'ai réussi à résoudre mon problème !

@rprouse merci ! Je voulais que ce soit une question.

J'ai dérivé mon attribut personnalisé de RepeatAttribute et défini le nom de la catégorie à l'aide du dictionnaire Propriétés.

Voici le code qui fonctionne pour moi :
[AttributeUsage(AttributeTargets.Method)] public class CandidateTestAttribute : RepeatAttribute { public CandidateTestAttribute() : base(50) { this.Properties.Set("Category", "CandidateTests"); } }

@GitSIPA Ça a l'air bien. Heureux que nous puissions aider.

Cette page vous a été utile?
0 / 5 - 0 notes