2017-12-27 8 views
0

Beide Annotationen werden verwendet, um zu signalisieren, dass die annotierte Methode vor jeder Testmethode in der aktuellen Testklasse ausgeführt werden sollte.Was ist der Unterschied zwischen BeforeClass (Junit 4) und BeforeEach (Junit5)

Warum haben wir dann die Annotation von @BeforeClass - Junit 4 zu @BeforeEach Junit 5?

gibt es noch etwas, das in Junit 5 hinzugefügt wurde, dass ich vermisse?

Ähnliche Fälle für andere Anmerkungen.

+1

Nein, dafür ist BeforeClass nicht geeignet. Lies das Javadoc. Aber Namen wurden geändert, weil ... sie dachten, die neuen Namen wären besser. Da es sich um eine neue, inkompatible Version handelt, ändern Sie die Namen nicht. –

+4

'@ Before' wurde in' @ BeforeEach' umbenannt (und '@ BeforeClass' wurde in' @ BeforeAll' umbenannt). Wie Sie bereits erwähnt haben, werden sie "vor jeder Testmethode ausgeführt". Das ist ein guter neuer Name. –

+0

Vielen Dank für die Überprüfung. BeforeClass wird auch verwendet, um einmal vor einer der Testmethoden in der Klasse ausgeführt zu werden, damit beide identisch sind. Es ist von, wenn sie gerade den Namen geändert haben. Ich wollte wissen, ob sie irgendwelche zusätzlichen Sachen in den neuen Annotationen hinzugefügt haben – Niraj

Antwort

1

Die Hauptfunktionalität hinzugefügt ist feinkörniger Kontrolle über die Test Instance Lifecycle, zum Beispiel durch @TestInstance Annotationen. Ich nehme an, das war einer der Gründe, die Namen der alten @Before und @BeforeClass Annotationen zu ändern.

Die alte (JUnit4) @Before und die neue (JUnit5) @BeforeEach ähnlich sind, dass sie ausgeführt werden erneut vor jeder@Test Methode in einer Testklasse. Wenn Ihre Klasse also über 10 Testmethoden verfügt, wird die Methode @BeforeEach zehnmal ausgeführt.

Die alte (JUnit4) @BeforeClass und die neue (JUnit5) @BeforeAll ähnlich sind, dass sie beide gerade ausgeführt einmal, bevor Sie einen der Tests in der Klasse. Selbst wenn Ihre Klasse 10 Tests hat, wird die Methode @BeforeAll nur einmal ausgeführt.

Der Vorschlag, in der Frage gemacht, dass @BeforeClass-@BeforeEach umbenannt wurde, ist somit falsche.

Weitere Informationen finden Sie auch unter this question über den Unterschied zwischen @Before, @BeforeClass, @BeforeEach und @BeforeAll.

2

Es gibt einige Änderungen, die erfordern, dass die Testklasse zuerst mit @TestInstance(Lifecycle.PER_CLASS) annotiert wird. Dadurch wird eine neue Testinstanz einmal pro Testklasse und nicht pro Methode erstellt.

Als Ergebnis können Sie @BeforeAll und @AfterAll für nicht-statische Methoden sowie auf Standardmethoden der Schnittstelle verwenden. Sie können auch @BeforeAll und @AfterAll in @Nested Testklassen verwenden.

Wenn Sie Lifecycle.PER_CLASS verwenden, müssen Sie sich daran erinnern, dass Sie, wenn Ihre Tests auf in Instanzvariablen gespeicherten Status angewiesen sind, diesen Status möglicherweise in @BeforeEach und @AfterEach zurücksetzen müssen.

Verwandte Themen