Ho una classe base astratta, che uso come base per i miei test di unità (TestNG 5.10). In questa classe, inizializzo l'intero ambiente per i miei test, impostando i mapping dei database, ecc. Questa classe astratta ha un metodo con un'annotazione @BeforeClass
che esegue l'inizializzazione.@BeforeClass ed ereditarietà - ordine di esecuzione
Successivamente, estendo tale classe con classi specifiche in cui dispongo di metodi @Test
e anche di metodi @BeforeClass
. Questi metodi eseguono l'inizializzazione specifica della classe dell'ambiente (ad esempio, inseriscono alcuni record nel database).
Come è possibile applicare un ordine specifico dei metodi annotati @BeforeClass
? Ho bisogno che quelli della classe base astratta siano eseguiti prima di quelli della classe che si estende.
Esempio: ordine
abstract class A {
@BeforeClass
doInitialization() {...}
}
class B extends A {
@BeforeClass
doSpecificInitialization() {...}
@Test
doTests() {...}
}
atteso:
A.doInitialization
B.doSpecificInitialization
B.doTests
ordine attuale:
B.doSpecificInitialization // <- crashes, as the base init is missing
(A.doInitialization // <---not executed
B.doTests) // <-/
Questo è fondamentalmente ciò che volevo evitare: non c'è bisogno di chiamare esplicitamente metodi della super (astratta) di classe. Soprattutto perché ho anche classi, che ereditano da A ma non hanno un proprio metodo @BeforeClass. Dovrei inserire uno solo per quello scopo. –
La soluzione alternativa 'dependsOnMethods' ha funzionato. Anche se preferirei un approccio "superclasse first" ... –
Per usare "dependsOnMethod" non si dovrebbe "eseguire l'inizializzazione" con "@Test"? Questo è un problema dal momento che tecnicamente non è un test da solo ... – N3da