Nunit: [Order] n'autorise pas les doublons sur TestFixtures, défaut de documentation ?

Créé le 9 oct. 2018  ·  4Commentaires  ·  Source: nunit/nunit

Selon la documentation : https://github.com/nunit/docs/wiki/Order-Attribute

L'OrderAttribute peut être placé sur une méthode de test ou un dispositif pour spécifier l'ordre dans lequel les tests sont exécutés.

Je ne vois pas cette documentation respectée de deux manières différentes.

Considérez les cas suivants de TextFixture

[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]

Cela me semble plus être un défaut de documentation/compréhension qu'autre chose, mais la façon dont le document lié indique "_or fixture_" implique pour moi que je pourrais écrire

[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]

Alors qu'en réalité il s'agit d'une erreur de compilation pour 1, 2 et 3

Attribut "Commande" en double

Ce serait vraiment bien que cela fonctionne intuitivement avec les doublons, cependant.

Tous les 4 commentaires

@Aarskin Cela nous aide (les développeurs NUnit) et les utilisateurs si la discussion sur un seul problème est conservée dans un seul problème gitHub.

La variante que vous décrivez ici est fondamentalement la même que sur le #3055. C'est ça...

[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]

est exactement la même chose que si vous aviez écrit...

[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]

ainsi que tout autre ordre des huit attributs que vous souhaitez utiliser. Les quatre attributs TestFixture sont tous placés sur la même classe, ce qui oblige NUnit à instancier cette classe quatre fois. Les quatre attributs Order sont également placés sur la même classe, provoquant un conflit puisqu'un test ne peut avoir qu'un seul ordre.

Ceci n'est __pas__ une limitation de NUnit. C'est ainsi que fonctionne la syntaxe de l'attribut C#. Il y a deux points clés à noter :

  1. Tout attribut entre crochets s'applique à l'élément suivant du code pouvant accepter un attribut. Dans ce cas, c'est la classe.

  2. Une séquence d'attributs entre crochets, comme [A, B, C] a exactement la même signification que la même séquence entre des paires de crochets séparées, comme [A] [B] [C].

Pour des raisons de style, j'évite d'utiliser la syntaxe virgule avec des attributs qui provoquent la création de plusieurs instances d'un test, car cela prête à confusion.

Cela pourrait être refondu pour autoriser une propriété/paramètre Order sur le TestFixture , mais avant de considérer cela, pouvez-vous nous donner un cas d'utilisation ? Généralement, Order est utilisé pour exécuter des tests d'intégration dans une séquence où vous effectuez des parties d'une opération plus longue dans l'ordre de vos tests. TestFixture paramétré est généralement utilisé pour tester les mêmes tests avec des données d'entrée différentes. Je ne peux pas penser à un scénario où vous voudriez faire cela dans un ordre particulier.

Mon cas d'utilisation est un test de régression métier logique, et la propriété/paramètre sur le TestFixture que je ne peux pas commander casser la façon dont je veux utiliser NUnit. Plus qu'avant, ces frameworks ne sont pas seulement utilisés pour les tests unitaires.

Pour contourner ce problème, vous pouvez passer à TestFixtureSource au lieu de plusieurs attributs TestFixture . À condition qu'il n'y ait qu'un seul TestFixtureSourceAttribute , les appareils seront exécutés dans l'ordre dans lequel vous renvoyez les données pour eux.

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