2010-07-05 12 views
17

Es gibt drei Möglichkeiten, Komponententests zu organisieren: Test pro Fixture, Klasse oder Feature. Das NUnit-Attribut für TestClass heißt TestFixture. Gibt es dafür historische Gründe?Warum TestFixture statt TestClass?

Antwort

11

Der wichtigste historische Grund ist, dass NUnit das Leben als ein direkter Port von JUnit begann, und Junit nannte es Testbefestigung.

NUnit 1.0 war vor meiner Zeit, aber mir wurde gesagt, es begann mit dem Umbenennen aller. Java-Dateien in JUnit in .cs-Dateien und versuchen, zu kompilieren. Es wurde von dort behoben und eine Benutzeroberfläche wurde hinzugefügt. Als ich für NUnit 2.0 beigetreten bin, gab es noch eine Methode in NUnit 1.0 namens IsVisualAgeForJava, da JUnit zu dieser Zeit ein spezielles Verhalten hatte.

In NUnit 2.0 war unser Ziel, NUnit mehr zu machen. Also fügten wir die Attribute und eine Menge anderer Sachen hinzu. Alle von uns kamen aus Java-Hintergründen und hatten jahrelang mit JUnit gearbeitet. Es erschien ganz natürlich, [TestFixture] zu verwenden.

4

Nun, da du danach fragst, habe ich einfach nachgesehen.
Eine Testvorrichtung ist der feste Grundzustand, der vor dem Ausführen der Tests festgelegt werden muss, sodass die Ergebnisse vorhersagbar und wiederholbar sind. In Unit-Test-Frameworks verwenden wir die SetUp- und TearDown-Attribute/-Methoden, um das Test-Fixture zu erstellen/zu löschen (z. B. Instanzvariablen mit den richtigen Objekten initialisieren).

13

Ich respektiere Mike Two's Antwort, aber ich würde behaupten, dass das NUnit-Team dies sehr falsch gemacht hat, und die Verwendung von [TestFixture] ist eine semantische Warze auf dem Gesicht von NUnit. Eine Testklasse ist kein Gerät. Von dem, was ich in Bezug auf JUnit herausgefunden habe, habe ich keinen Hinweis auf eine Testklasse als Testgerät gefunden, noch habe ich viel Diskussion über "Testeinrichtungen" in Bezug auf Testklassen gefunden. Vielmehr beziehen sich alle JUnit/xUnit-Diskussionen über Fixtures auf Setup und Teardown, bei denen es sich natürlich um die üblichen Methoden handelt, die zum Einrichten von Test-Fixtures verwendet werden.

Beachten Sie, dass Sie in NUnit 2.5 die Annotation [TestFixture] entfernen können.

Update: (Juli 2012)

ich die Gurke Buch gerade las und auf Seite 99, Autor Matt Wynne erklärt den Ursprung der Verwendung von "Leuchte". Ich zitiere:

Es gibt eine lange Tradition (aus der Hardware-Welt kommen, wo Testvorrichtungen entstanden), die Verbindung zwischen dem Testsystem und dem zu testenden System eine Vorrichtung zu nennen. Dies ist die "glue code" -Rolle, die wir in diesem Buch als Automatisierungscode bezeichnet haben. Das FIT-Test-Framework verwendet diese Bedeutung des Begriffs. Einige Unit-Test-Tools (z. B. NUnit) haben das Problem weiter verwechselt, indem sie sich auf die Testfallklasse selbst als Fixpunkt bezogen haben. So viel zu einer allgegenwärtigen Sprache! (Wynne & Hellesoy, 2012)

+0

Ich stimme Ihnen zu. Es war ein Fehler. Sobald es da ist, ist es schwer zurückzunehmen. Ich denke jedoch, dass es zu dieser Zeit in JUnit ein ähnliches Verhalten gab. Ich könnte völlig falsch liegen. Das war alles Anfang 2002 und ich könnte mich daran falsch erinnern. In beiden Fällen stimmen Sie in Ihrer Behauptung, dass eine Testklasse und eine Fixture unterschiedliche Dinge sind. –

+2

Danke Mike Zwei, ich bin immer fasziniert von den Geschichten, die hinter den Projekten in unserem Handwerk stecken. Mir ist auch klar, dass ich, wenn es mir nicht gefällt, nicht winseln, sondern einen Patch einreichen sollte. Ich frage mich nur, ob ich übertrieben pedantisch bin, da bisher niemand diese Änderung an NUnit vorgenommen hat. – ybakos

+0

Ich überlegte, es ein paar Mal zu ändern. Ich habe eine Reihe von Problemen mit Rückwärtskompatibilität getroffen.Ich habe vor Jahren regelmäßige NUnit-Arbeiten eingestellt, also beabsichtige ich nicht, es in Zukunft zu ändern. –