Primavera y T ESTÁN TRABAJANDO BIEN Juntos, pero hay algunas cosas que deben tenerse en cuenta. Además de la subclasificación de AbstractTestNGSpringContextTests, debe tener en cuenta cómo interactúa con las anotaciones estándar de configuración/desmantelamiento de TestNG.
TestNG tiene cuatro niveles de configuración
- BeforeSuite
- BeforeTest
- BeforeClass
- BeforeMethod
que ocurren exactamente como era de esperar (gran ejemplo de API autodocumentado) Todos estos tienen un valor opcional llamado "dependsOnMethods" que puede tomar un String o String [], que es el nombre o los nombres de los métodos en el mismo nivel.
La clase AbstractTestNGSpringContextTests tiene un método anotado BeforeClass llamado springTestContextPrepareTestInstance, que debe establecer su método de configuración para que dependa de si está utilizando una clase autocableada en él. Para los métodos, no tiene que preocuparse por el autoenvío, ya que ocurre cuando la clase de prueba está configurada en ese método anterior a la clase.
Esto simplemente deja la pregunta de cómo se puede utilizar una clase autoelertada en un método anotado con BeforeSuite. Puede hacer esto llamando manualmente a springTestContextPrepareTestInstance, aunque no está configurado de manera predeterminada para hacer esto, lo he hecho varias veces con éxito.
Así, para ilustrar, una versión modificada del ejemplo de Arup:
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {
@Autowired
private IAutowiredService autowiredService;
@BeforeClass(dependsOnMethods={"springTestContextPrepareTestInstance"})
public void setupParamValidation(){
// Test class setup code with autowired classes goes here
}
@Test
public void testNullParamValidation() {
// Testing code goes here!
}
}
Gracias. Eso es exactamente lo que estoy buscando. –
¡Qué desastre! Primero aplica jerarquía de clase específica. En segundo lugar, es bastante confuso ya que el caso de prueba que usa '@ Transactional' puede extender la versión no transaccional por error. Pero desafortunadamente no hay otra manera de usar un Spring con TestNG. –
@GrzesiekD. Mi esperanza es que algo haya cambiado en 4.5 años. :) Por lo tanto, vuelva a verificar el estado actual. – lexicore