@BeforeTest di TestNg sulla class base si verifica solo una volta per fixture

Sto provando a utilizzare @BeforeTest per ottenere il codice per … eseguire una volta prima di ogni test.

Questo è il mio codice:

public class TestBase { @BeforeTest public void before() { System.out.println("BeforeTest"); } } public class TestClass extends TestBase{ @Test public void test1(){} @Test public void test2(){} } 

“BeforeTest” viene stampato una sola volta, non due volte. Che cosa sto facendo di sbagliato?

Utilizza @BeforeMethod, non @BeforeTest.

Il significato di @BeforeTest è spiegato nella documentazione .

“BeforeTest” viene stampato una sola volta, non due volte. Che cosa sto facendo di sbagliato?

***Scusate. Non ho notato che è stato scritto @BeforeTest, ma nel tuo esempio @BeforeTest è quasi uguale a @BeforeClass, e meglio usare @BeforeClass, quando non hai più classi di test.

@BeforeClass “dovrebbe essere dichiarato nella stessa class che i tuoi metodi di test, non diversamente!

 //Example package test; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class Tests { private String bClass; private String bMethod1; private String bMethod2; @BeforeClass public void beforeClass() { bClass = "BeforeClass was executed once for this class"; } @BeforeMethod public void beforeMetodTest1() { bMethod1 = "It's before method for test1"; } @Test public void test1() { System.out.println(bClass); System.out.println(bMethod1); } @BeforeMethod public void beforeMethodTest2() { bMethod2 = "It's before method for test2"; } @Test public void test2() { System.out.println(bClass); System.out.println(bMethod2); } } 

@BeforeClass verrà eseguito una volta, prima dei tuoi metodi di test in questa class. @BeforeMethod verrà eseguito prima del metodo di prova, prima del quale è stato scritto.

@BeforeClass può essere solo uno nella class di test, nella differenza @BeforeMethod! (Se è un po ‘@BeforeClass, vengono eseguiti a turno, ma non è una composizione corretta del test)

PS Ci scusiamo per il mio inglese 🙂

Secondo la documentazione , un metodo annotato con @BeforeTest viene eseguito prima dell’esecuzione di qualsiasi metodo @Test che appartiene alle classi all’interno del tag.

Dalla mia esperienza:

  • Ogni metodo @BeforeTest viene eseguito una sola volta
  • Se disponi di più metodi @BeforeTest, l’ordine della loro esecuzione dipende dall’ordine della class che contiene quei metodi @BeforeTest.

Potresti provare questo impostando un semplice esempio.