Parametrisierte Unit-Test-Suites

8

Ich versuche, einige parametrisierte Testsuiten einzurichten, leider bisher ohne Glück. Ich habe zwei Parameter, und ich möchte mehrere Testfälle (sie sind in verschiedenen Klassen) mit allen möglichen Kombinationen ausführen. Ich habe versucht, es mit JUnit4 zu machen, aber ich kann es nicht richtig einrichten. Dies wäre meine Grundidee:

  1. TestSuite1.class richtet einen Parametersatz ein und startet TestSuite2.class .
  2. TestSuite2.class richtet die zweite Gruppe von Parametern ein und startet dann die eigentlichen Tests, die beide Parameter verwenden.

Inzwischen scheint es nicht möglich, sowohl Suite.class als auch Parameterized.class in der RunWith Annotation gleichzeitig einzurichten (laut google, Parameterized extends Suite , bekomme ich normalerweise "no runnable" Methode gefunden "Nachricht, wenn ich verwende."

So sieht mein Code grundsätzlich aus:

TestSuite1.class:

%Vor%

TestSuite2.class sieht genauso aus wie TestSuite1.class , außer dass ich TestCase1.class der Suite statt TestSuite2 hinzugefügt habe und eine andere Variable in Params festlegt.

TestCase1.class:

%Vor%

Ich bin offen für alle Ideen - auch zum Beispiel mit TestNG. Ich habe es auch versucht (obwohl heute das erste Mal ich es gesehen habe), aber wie ich bemerkte, sind die Suiten ein bisschen anders als in JUnit. Ich würde es vorziehen, XML-Dateien vor dem Testen nicht einzurichten, möchte ich alle programmgesteuert lösen.

Ist das, was ich versuche zu erreichen, mit jedem Rahmen möglich?

Update: Mit TestNG habe ich den folgenden Code:

Start.class:

%Vor%

Params.class:

%Vor%

FirstTest.class:

%Vor%

SecondTest.class ist dasselbe wie FirstTest.class . Wenn ich das starte, läuft FirstTest 4 mal, dann läuft SecondTest 4 mal. Ich möchte FirstTest einmal und SecondTest einmal auch mit dem ersten Satz der Parameter laufen lassen. Dann möchte ich FirstTest und SecondTest einmal ausführen, mit dem zweiten Parametersatz usw.

Ich habe versucht setPreserveOrder (true) zu setzen und habe auch alle setParallel-Optionen ausprobiert. Auf diese Weise sind die Ergebnisse jedoch in zufälliger Reihenfolge.

(Es wäre ein Selentest. Ich bin mir bewusst, dass Tests nicht voneinander abhängen sollten, aber trotzdem wäre es mein gewünschter Weg dafür)

    
skandigraun 02.01.2014, 20:41
quelle

4 Antworten

0

Also, so weit ich es verstehe, wollen Sie einen Test mit einer Reihe von Parametersätzen durchführen. Das ist mit JUnit möglich und deshalb gibt die Methode, die mit @Parameters annotiert wurde, eine Sammlung von Arrays zurück (im Allgemeinen eine Menge von Sets).

Sehen Sie sich dieses Beispiel an:

%Vor%

Bearbeiten: Wenn Sie Parameter zwischen mehreren Tests teilen möchten, können Sie in Ihren Testfällen eine Abstraktion verwenden.

%Vor%

Aber der beste Weg, es zu tun, denke ich wäre, TestNGs Datenanbieter zu verwenden. Sehen Sie sich das Beispiel in Abschnitt 5.6.2 und die Verwendung von statischen Datenprovidern an Ссылка

    
Tomasz Bekas 02.01.2014 21:48
quelle
0

Um das Ziel zu erreichen, alle Testfälle mit denselben Parametern in sequentieller Reihenfolge auszuführen, benötigen Sie ein anderes Runner , da dieses Verhalten in dieser Klasse enthalten ist. Sie haben Glück, denn dies ist im JUnit Toolbox-Projekt mit der ParallelParameterized klasse!

    
Adam Hawkes 29.04.2015 15:48
quelle
0

Obwohl Parameterized % Suite erweitert, verhält es sich völlig anders - in Missachtung des Liskow-Substitutionsprinzips . Dies liegt daran, dass normalerweise der Konstruktor Suite(Class<?>, RunnerBuilder) die Annotation @SuiteClasses verarbeitet. Aber Parameterized(Class<?>) ersetzt dieses Verhalten durch eine Verarbeitung von @Parameters .

Wenn Sie das Verhalten von Suite und Parameterized kombinieren möchten, müssen Sie außerhalb von JUnit 4 suchen. Sie könnten Ihre eigene Runner wie Adam Hawkes implementieren, die bereits in einem anderen Beitrag hier erwähnt wurde.

Ich habe das selbe selbst gemacht und eine Bibliothek zusammengestapelt, die euch einen ParameterizedSuite Runner zur Verfügung stellt: Ссылка

Eine parametrisierte Testsuite sieht folgendermaßen aus:

%Vor%     
Peter Wippermann 04.07.2016 21:50
quelle
0

Hier schlagen einige andere vor, dass sie viel flexibler zu sein scheinen: @RunWith ( Enclosed.class)

Kurz gesagt: Anstelle von @Suite.SuiteClasses(...) , verwenden Sie einfach @RunWith(Enclosed.class) und erweitern Sie Ihre Test Classes

%Vor%

Jetzt mit parametrisierten:

%Vor%

Ihre Testklassen für parametrisierte Tests sehen folgendermaßen aus:

%Vor%

Entspricht genau dem, nach dem ich gesucht habe. Ich kann verschiedene Testszenarien erstellen (vollständiger Test, schneller Test, ...). Erstellen Sie einfach verschiedene @ RunWith-Klassen (Enclosed.class) und erweitern Sie die Tests, die Sie einschließen möchten.

Einziger Nebenpunkt scheint zu sein, dass Enclosed.class sich nicht um die Sortierreihenfolge kümmert (wenn es Ihnen wichtig ist). Ich löste es, indem ich Enclosed:

%Vor%

Und dann @RunWith(SortedEnclosed.class)

verwenden     
allofmex 17.02.2018 11:04
quelle

Tags und Links