Meine Frage ist im Grunde die gleiche wie diese SOF-Frage , aber behandelt mit @BeforeMethod
anstelle von @BeforeClass
für TestNG.
Spielt die Testklassenvererbung einen Faktor bei der Bestimmung der Reihenfolge, in der @BeforeMethod
annotierte Methoden ausgeführt werden? Wenn ich Klasse A habe und eine Klasse B A erweitert und beide eine @BeforeMethod
-Methode haben, dann wird das Eltern (A) vor dem Kind (B) laufen oder wird das Kind vor dem Eltern laufen, oder hängt die Reihenfolge von einigen ab anderer Faktor wie die alphabetische Reihenfolge des Methodennamens. Ich versuche zu sehen, ob es eine Vererbungsreihenfolge gibt, auf die ich mich verlassen kann, anstatt Parameter der Annotation wie dependsOnMethods zu verwenden.
Wenn ich Klasse A habe und eine Klasse B erweitert A und beide eine @BeforeMethod-Methode haben, dann wird das Eltern (A) vor dem Kind (B) laufen [...]
Ja, werden sie.
@BeforeMethod
-Methoden werden in der Reihenfolge der Vererbung ausgeführt - zuerst die höchste Superklasse und dann die Vererbungskette. @AfterMethod
-Methoden werden in umgekehrter Reihenfolge ausgeführt (die Vererbungskette aufwärts).
Beachten Sie jedoch, dass die Reihenfolge mehrerer annotierter Methoden innerhalb einer Klasse nicht garantiert ist (also vermeiden Sie das am besten).
Das Lesen des Codes scheint in allen Versionen von TestNG der Fall gewesen zu sein, wurde jedoch erst im Oktober 2016 dokumentiert:
Die obigen Anmerkungen werden ebenfalls berücksichtigt (geerbt), wenn sie platziert werden eine Oberklasse einer TestNG-Klasse. Dies ist beispielsweise nützlich um Zentralisierung des Test-Setups für mehrere Testklassen in einem gemeinsamen Oberklasse.
In diesem Fall garantiert TestNG, dass die "@Before" -Methoden sind in Vererbungsreihenfolge ausgeführt (oberste Klasse zuerst, dann gehend die Vererbungskette) und die "@After" -Methoden in umgekehrter Reihenfolge (geht die Erbkette hinauf).
Siehe documentation-main.html auf GitHub oder Online-Dokumentation .
Disclaimer: Es war ich, der diesen Zusatz in den Dokumenten geschrieben und eingereicht hat.
Dies geschieht in JUnit, aber nicht in TestNG. Sie können das Kind jedoch einfach das Eltern-Setup explizit aufrufen.
%Vor%Die Reihenfolge hat nichts mit der Vererbung der Klasse zu tun.
Sie können versuchen, das Prioritätsattribut für die @Test
Annotation festzulegen. Wenn in der Anmerkung keine Parameter festgelegt sind, werden sie in alphabetischer Reihenfolge ausgeführt.
Sie setzen den Methoden auch ein Präfix entsprechend der Reihenfolge, in der sie ausgeführt werden sollen (z. B. 01_method1()
, 02_method2()
).