Bei der Migration einiger Tests von JUnit zu TestNG sehe ich mich mit einem Problem konfrontiert, da diese Test-Frameworks ihre Testklasseninstanzen unterschiedlich behandeln.Initialisieren und Bereinigen von Testdaten für parallele Tests in TestNG
JUnit erstellt für jede Testmethode eine neue Instanz der Test-Klasse. So ein gemeinsames Muster, das ich sehe, ist:
public class MyTest {
private Stream inputData;
@Before
public void setUp() {
// Set up some data in (non-static) instance fields
// This data is isolated per test
inputData = createInputDataStream();
}
@Test
public void testStuff() {
// Use the data from the instance fields
doStuff(inputData);
}
@After
public void tearDown() {
// Clean up the data from the instance fields
closeInputDataStream(inputData);
}
}
Im Gegensatz dazu verwendet TestNG eine einzelne Instanz der Klasse Test für alle Prüfverfahren. Also das obige Muster funktioniert nicht! Da Daten in Instanzfeldern gespeichert werden, sind die Werte nicht mehr isoliert. Dies kann zu überschriebenen Daten während der Testphase führen, wenn die parallele Ausführung aktiviert ist.
Also wie würde ich das mit TestNG machen? Gibt es eine Möglichkeit, Daten zu speichern, die jeweils isoliert sind? @BeforeMethod
- @Test
- @AfterMethod
Tupel?
Ich kann alle 3 Schritte innerhalb der selbst tun, aber das würde erfordert hinzufügen plumpen try...finally
Blöcke zu jedem Test. Ich habe auch versucht, ITestContext
, aber es scheint auch für den gesamten Testlauf freigegeben werden.
'@ BeforeMethod' und' @AfterMethod 'wird um jeden '@ Test'-Aufruf herum aufgerufen; also soll das genau so funktionieren, wie du es beschrieben hast. Der einzige Unterschied besteht darin, dass Sie den Klassenstatus jedes Mal überschreiben müssen, anstatt eine neue Instanz zu erstellen. Haben Sie bei diesem Ansatz unerwartetes Verhalten bemerkt? Oder versuchen Sie, alle Tests in der Klasse parallel auszuführen (ich fürchte, das ist nicht möglich)? –
@CostiCiudatu Hauptsächlich während der parallelen Ausführung - die Werte werden manchmal mitten im Test überschrieben. – metacubed
Wenn Sie die Testmethoden innerhalb der Klasse parallel ausführen wollen (''), gibt es keine Möglichkeit, sich gegen die Rennbedingungen zu verteidigen, da Sie den veränderbaren Zustand ändern. –