Tengo una clase base abstracta, que utilizo como base para las pruebas de mi unidad (TestNG 5.10). En esta clase, inicializo todo el entorno para mis pruebas, estableciendo mapeos de bases de datos, etc. Esta clase abstracta tiene un método con una anotación @BeforeClass
que hace la inicialización.@BeforeClass and inheritance - orden de ejecución
A continuación, extiendo esa clase con clases específicas en las que tengo @Test
métodos y también @BeforeClass
métodos. Estos métodos hacen una inicialización del entorno específica de la clase (por ejemplo, poner algunos registros en la base de datos).
¿Cómo puedo hacer cumplir un orden específico de los métodos anotados @BeforeClass
? Necesito que los de la clase base abstracta se ejecuten antes que los de la clase extendida.
Ejemplo: Para
abstract class A {
@BeforeClass
doInitialization() {...}
}
class B extends A {
@BeforeClass
doSpecificInitialization() {...}
@Test
doTests() {...}
}
esperado:
A.doInitialization
B.doSpecificInitialization
B.doTests
orden real:
B.doSpecificInitialization // <- crashes, as the base init is missing
(A.doInitialization // <---not executed
B.doTests) // <-/
eso es básicamente lo que quería evitar: no hay necesidad de llamar explícitamente métodos de la superclase (resumen). Especialmente porque también tengo clases, que heredan de A pero que no tienen un método propio de @BeforeClass. Tendría que insertar uno solo para ese propósito. –
La solución 'dependsOnMethods' hizo el truco. Aunque preferiría un enfoque de "superclase primero" ... –
Para usar "dependsOnMethod" no se debe anotar "doInitialization" con "@Test"? Eso es un problema, ya que técnicamente no es una prueba en sí misma ... – N3da