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?
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;
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: Ссылка
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.
Die Ausgabe von diesem ist:
%Vor%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.