Nunit: [Bestellung] erlaubt keine Duplikate auf TestFixtures, Dokumentationsfehler?

Erstellt am 9. Okt. 2018  ·  4Kommentare  ·  Quelle: nunit/nunit

Gemäß der Dokumentation: https://github.com/nunit/docs/wiki/Order-Attribute

Das OrderAttribute kann auf einer Testmethode oder Vorrichtung platziert werden, um die Reihenfolge anzugeben, in der Tests ausgeführt werden.

Ich sehe diese Dokumentation nicht auf zwei verschiedene Arten respektiert.

Betrachten Sie die folgenden TextFixture-Fälle

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

Dies scheint mir eher ein Dokumentations-/Verständnisfehler als alles andere zu sein, aber die Art und Weise, wie das verlinkte Dokument "_oder Vorrichtung_" angibt, impliziert für mich, dass ich schreiben könnte

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

In Wirklichkeit ist dies ein Compilerfehler für 1, 2 und 3

Doppeltes Attribut „Bestellung“.

Es wäre jedoch wirklich schön, wenn dies intuitiv mit Duplikaten funktionieren würde.

Alle 4 Kommentare

@Aarskin Es hilft sowohl uns (den NUnit-Entwicklern) als auch den Benutzern, wenn die Diskussion über ein einzelnes Problem innerhalb eines einzelnen gitHub-Problems gehalten wird.

Die Variante, die Sie hier beschreiben, ist im Grunde die gleiche wie bei #3055. Dies ist das...

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

ist genauso wie wenn du geschrieben hättest...

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

sowie jede andere Reihenfolge der acht Attribute, die Sie verwenden möchten. Die vier TestFixture -Attribute werden alle derselben Klasse zugeordnet, was dazu führt, dass NUnit diese Klasse viermal instanziiert. Die vier Order -Attribute werden ebenfalls in derselben Klasse platziert, was zu einem Konflikt führt, da ein Test möglicherweise nur eine Reihenfolge hat.

Dies ist __keine__ Einschränkung von NUnit. So funktioniert die C#-Attributsyntax. Es sind zwei wichtige Punkte zu beachten:

  1. Jedes Attribut in eckigen Klammern gilt für das nächste Element im Code, das ein Attribut akzeptieren kann. In diesem Fall ist es die Klasse.

  2. Eine Folge von Attributen in eckigen Klammern wie [A, B, C] hat genau die gleiche Bedeutung wie dieselbe Folge in getrennten Klammerpaaren, wie [A] [B] [C].

Aus Stilgründen vermeide ich es, die Kommasyntax mit Attributen zu verwenden, die dazu führen, dass mehrere Instanzen eines Tests erstellt werden, da dies zu Verwirrung führt.

Dies könnte so umgestaltet werden, dass eine Eigenschaft/ein Parameter Order für TestFixture wird, aber bevor wir darüber nachdenken, können Sie uns einen Anwendungsfall nennen? Im Allgemeinen wird Order verwendet, um Integrationstests in einer Sequenz auszuführen, in der Sie Teile einer längeren Operation in Ihren Tests der Reihe nach ausführen. Parametrisiertes TestFixture wird normalerweise zum Testen derselben Tests mit unterschiedlichen Eingabedaten verwendet. Ich kann mir kein Szenario vorstellen, in dem Sie das in einer bestimmten Reihenfolge tun möchten.

Mein Anwendungsfall sind logische Business-Regressionstests, und die Eigenschaft/der Parameter auf der TestFixture, die ich nicht bestellen kann, kann nicht so brechen, wie ich NUnit verwenden möchte. Diese Frameworks werden mehr denn je nicht nur für Unit-Tests verwendet.

Als Problemumgehung können Sie anstelle mehrerer TestFixture -Attribute zu TestFixtureSource wechseln. Vorausgesetzt, es gibt nur ein TestFixtureSourceAttribute , werden die Fixtures in der Reihenfolge ausgeführt, in der Sie die Daten für sie zurücksenden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen