Podczas migracji niektórych testów z JUnit do TestNG napotykam na problem z powodu różnicy w sposobie traktowania przez te struktury testowe ich instancji klasy testowej.Inicjowanie i czyszczenie danych testowych dla testów równoległych w TestNG
JUnit tworzy nową instancję klasy Test dla każdej metody testu. Tak więc widzę wspólny wzorzec:
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);
}
}
W przeciwieństwie do tego, TestNG używa pojedynczej instancji klasy Test dla wszystkich metod testowych. Tak więc powyższy wzór nie działa! Ponieważ dane są przechowywane w polach instancji, wartości nie są już izolowane. Może to spowodować, że nadpisane dane zostaną wykonane w połowie testu, jeśli włączone jest wykonywanie równoległe.
Jak to zrobić z TestNG? Czy istnieje sposób przechowywania danych, które są izolowane dla każdej krotki?
Mogę wykonać wszystkie 3 kroki wewnątrz samej @Test
, ale wymagałoby to dodania niezręcznych bloków try...finally
do każdego testu. Próbowałem również używać ITestContext
, ale wydaje się również, że jest on udostępniany dla całego przebiegu testowego.
'@ BeforeMethod' i' @AfterMethod 'wywołaj wszystkie wywołania' @ Test'; więc to powinno działać dokładnie tak, jak opisałeś. Jedyna różnica polega na tym, że za każdym razem zastępujesz stan klasy, zamiast tworzyć nową instancję. Czy zauważyłeś jakieś nieoczekiwane zachowanie w tym podejściu? Czy też próbujesz równolegle uruchomić wszystkie testy w klasie (obawiam się, że to niemożliwe)? –
@CostiCiudatu Głównie podczas wykonywania równoległego - wartości czasami zostają nadpisane w połowie testu. – metacubed
Jeśli chcesz uruchomić metody testowe w klasie równolegle (''), nie ma sposobu, aby bronić się przed warunkami wyścigu, ponieważ zmieniasz stan zmienności. –