tipos que por medio listas inyección inyeccion habilita explicacion dependencias dependencia configuración bean anotaciones junit spring testng

junit - por - que es inyección de dependencias en spring



Inyección de Dependencia de Primavera con TestNG (3)

Spring support JUnit bastante bien en eso: con la anotación RunWith y ContextConfiguration , las cosas se ven muy intuitivas

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:dao-context.xml")

Esta prueba podrá ejecutarse correctamente tanto en Eclipse como en Maven. Me pregunto si hay cosas similares para TestNG. Estoy considerando pasar a este Marco de "Próxima Generación", pero no encontré una coincidencia para probar con Spring.


Aquí hay un ejemplo que funcionó para mí:

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 { public void testNullParamValidation() { // Testing code goes here! } }



Spring y TestNG funcionan bien juntos, pero hay algunas cosas a tener 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
  • Antes de clase
  • BeforeMethod

que ocurren exactamente como cabría esperar (gran ejemplo de API de auto documentación). 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, del que debe configurar su método de configuración para que dependa si usa una clase autoconectada. 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 podrías usar 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.

Entonces, 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! } }