@parameters wird vor der @beforeclass-Methode ausgeführt

8

Ich benutze die "parametrisierte" Funktion von Junit 4 und habe festgestellt, dass die Methode @parameters vor der @beforeclass-Methode ausgeführt wird. Das verursacht ein Problem für mich, da die Parameter, die ich über @parameters an die Testfälle übergebe, von dem Code abhängen, der in der @beforeclass-Methode initialisiert wird. Zum Beispiel

%Vor%

Nun initialisiere ich die Variable "initializeThis" in der @beforeclass-Methode auf "true", aber (überraschenderweise) drucke ich bei der Ausführung des Testfalls

%Vor%

Das ist etwas nicht erwartet.
Meine Frage ist; Gibt es eine Möglichkeit, die @beforeclass-Methode vor @parameters auszuführen, können wir tun, dass dies in Junit 4 ist?

    
user85 11.07.2012, 10:39
quelle

4 Antworten

5

Ich würde nur einen einfachen alten statischen Java-Initiator {..} anstelle von @BeforeClass verwenden, zum Beispiel:

%Vor%

Einziger Wermutstropfen, den ich kenne, ist, dass von diesem geerbte Klassen statischen Initialisierer nicht überschreiben können, während @BeforeClass in diesem Aspekt eine gewisse Freiheit bietet;

    
Vilnis 20.02.2013 14:40
quelle
4

Das ist eine alte Frage, aber ich hatte in letzter Zeit das gleiche Problem. Es scheint mir, dass keine der Lösungen für die offensichtlichste Problemumgehung zu gehen scheint - Aufruf der @ BeforeClass-Methode in der @Parameters-Methode. Letzteres ist statisch und wird nur einmal ausgeführt - bevor irgendwelche Tests ausgeführt wurden. Es ist also in jeder Hinsicht eine @BeforeClass-Methode, obwohl sie nicht als solche annotiert ist. Weitere Details finden Sie hier: Ссылка

    
Nick 28.12.2013 22:15
quelle
1

JUnit erstellt ein Runner für jedes Element in der Parameterliste, wobei Runner die Testmethode einkapselt. Das @Parameters wird also immer vor der @BeforeClass ausgeführt.

Sie können jedoch @Parameterized mit Angenommen kombinieren. Sie fügen immer alle Parameter in Ihre Liste ein, unabhängig davon, ob Sie sie ausführen möchten oder nicht. Fügen Sie dann in der Testmethode den Wert assumeTrue() hinzu, der für den Wert initializeThis gilt.

%Vor%

Die Ausgabe von diesem ist:

%Vor%     
Matthew Farwell 11.07.2012 13:46
quelle
0

Dies funktioniert jedoch nicht mit TestSuites. Gegeben

%Vor%

Das funktioniert nicht:

%Vor%

Die Ausgabe ist

%Vor%

Auch das:

%Vor%

Der Ausgang ist "Parameter = 1". Der statische Initialisierer wurde also überhaupt nicht ausgeführt. Ich habe die folgende Problemumgehung gefunden. Erweitern Sie "Suite" und fügen Sie dort den statischen Initialisierer ein:

%Vor%

und verwenden Sie es in Ihrer Testsuite:

%Vor%

Die Ausgabe ist

%Vor%

Jetzt funktioniert es.

    
mmirwaldt 03.05.2013 01:07
quelle

Tags und Links