El marco Spring TestContext (que se encuentra en el paquete org.springframework.test.context
proporciona soporte general basado en anotaciones para pruebas unitarias y de integración que es independiente del marco de prueba que se utiliza. TestContext El marco también pone mayor énfasis en la convención que en la configuración, con valores predeterminados razonables que se pueden cambiar mediante una configuración basada en anotaciones.
Además de la infraestructura de prueba general, el marco TestContext proporciona soporte explícito para JUnit 4, JUnit Jupiter (también conocido como JUnit 5) y TestNG. Se proporcionan clases auxiliares abstract
para JUnit 4 y TestNG Spring. Además, Spring proporciona un Runner
especial de JUnit y unas Rules
especiales de JUnit para JUnit 4 y una Extensión
especial para JUnit Jupiter, que le permiten escribir las llamadas clases de prueba POJO. Las clases de prueba POJO no necesariamente extienden una jerarquía de clases específica, como las clases auxiliares abstract
.
La siguiente sección examina brevemente los componentes internos del marco TestContext. Si solo está interesado en utilizar el marco y no necesita ampliarlo con sus propios escuchas o cargadores personalizados, salte directamente a las secciones sobre configuración (administración de contexto, inyección de dependencia, administración de transacciones), clases auxiliares y soporte para anotaciones.
Ver las secciones mencionadas en "Clases auxiliares del marco TestContext".
Abstracciones clave
El núcleo del marco consta de la clase TestContextManager
y las interfaces TestContext
, TestExecutionListener
y SmartContextLoader
. Se crea una interfaz TestContextManager
para cada clase de prueba (por ejemplo, para ejecutar todos los métodos de prueba dentro de una clase de prueba en JUnit Jupiter). La interfaz TestContextManager
, a su vez, administra el TestContext
, que contiene el contexto de la prueba actual. La interfaz TestContextManager
también actualiza el estado TestContext
a medida que se ejecuta la prueba y delega el trabajo a las implementaciones TestExecutionListener
que instrumentan la ejecución real de la prueba, proporcionando inyección de dependencia. Gestión de transacciones, etc. La interfaz SmartContextLoader
es responsable de cargar el ApplicationContext
para una clase de prueba determinada. Para obtener más información y ejemplos de diferentes implementaciones, consulte javadoc y el conjunto de pruebas Spring.
Contexto de prueba
La interfaz TestContext
encapsula el contexto en el que se ejecuta la prueba (independientemente del marco de prueba real que se esté utilizando) y proporciona gestión de contexto, así como soporte de almacenamiento en caché para la instancia de prueba de la que es responsable. . La interfaz TestContext
también delega en SmartContextLoader
la carga del ApplicationContext
cuando lo solicite.
TestContextManager
La interfaz TestContextManager
es el punto de entrada principal al Spring TestContext Framework y es responsable de administrar un único TestContext
y señalar eventos a cada registrado TestExecutionListener
en puntos bien definidos ejecución de prueba :
-
Antes de cualquier método "antes de las clases" o "antes de todos" de un marco de prueba en particular.
-
Postprocesamiento de la instancia de prueba.
-
Antes de cualquier método "antes" o "antes de cada" de un marco de prueba en particular.
-
Inmediatamente antes de que se ejecute el método de prueba, pero después de configurar la prueba.
-
Inmediatamente después de ejecutar el método de prueba, pero antes de que se destruya la prueba.
-
Después de cualquier método "después" o "después de cada" de un marco de prueba en particular.
-
Después de cualquier método "después de la clase" o "después de todo" de un marco de prueba en particular.
TestExecutionListener
El oyente TestExecutionListener
define una API para responder a los eventos de ejecución de pruebas publicados por el TestContextManager
con el que está registrado el oyente. Consulte la configuración de TestExecutionListener
.
Cargadores de contexto
ContextLoader
es una interfaz de estrategia para cargar ApplicationContext
para una prueba de integración administrada por Spring TestContext Framework. Debe implementar SmartContextLoader
en lugar de esta interfaz para brindar soporte para clases de componentes, perfiles de definición de beans activos, fuentes de propiedades de prueba, jerarquías de contexto y soporte para WebApplicationContext
.
SmartContextLoader
es una extensión de la interfaz ContextLoader
que reemplaza la simple interfaz SPI ContextLoader
original. Específicamente, SmartContextLoader
puede elegir manejar ubicaciones de recursos, clases de componentes o inicializadores de contexto. Además, SmartContextLoader
puede establecer perfiles de definición de beans activos y probar fuentes de propiedades en el contexto cargado.
Spring proporciona las siguientes implementaciones:
-
DelegatingSmartContextLoader
: uno de los dos cargadores predeterminados, delega internamente el trabajo aAnnotationConfigContextLoader
,GenericXmlContextLoader
oGenericGroovyXmlContextLoader
cargadores, dependiendo de la configuración declarada para la clase de prueba o de la presencia de ubicaciones predeterminadas o clases de configuración predeterminadas. La compatibilidad con Groovy está habilitada solo si Groovy está en el classpath. -
WebDelegatingSmartContextLoader
: uno de los dos cargadores predeterminados, delega internamente el trabajo aAnnotationConfigWebContextLoader
,GenericXmlWebContextLoader
oGenericGroovyXmlWebContextLoader
cargadores dependiendo de la configuración declarada para la clase de prueba o de la presencia de ubicaciones predeterminadas o clases de configuración predeterminadas. El cargador webContextLoader
solo se usa si la clase de prueba tiene la anotación@WebAppConfiguration
. La compatibilidad con Groovy está habilitada solo si Groovy está en el classpath. -
AnnotationConfigContextLoader
: carga elApplicationContext
estándar de las clases de componentes. -
AnnotationConfigWebContextLoader
: carga elWebApplicationContext
de las clases de componentes. -
GenericGroovyXmlContextLoader
: carga unApplicationContext
estándar desde recursos, que son scripts Groovy o archivos de configuración XML. -
GenericGroovyXmlWebContextLoader
: cargaWebApplicationContext
desde recursos, que son scripts Groovy o archivos de configuración XML. -
GenericXmlContextLoader
: carga elApplicationContext
estándar desde ubicaciones de recursos XML. -
GenericXmlWebContextLoader
: cargaWebApplicationContext
desde ubicaciones de recursos XML.
Carga inicial del framework TestContext
La configuración predeterminada para los componentes internos de Spring TestContext Framework es suficiente para todos los casos de uso comunes. Sin embargo, hay ocasiones en las que un equipo de desarrollo o un marco de trabajo de terceros necesita cambiar el ContextLoader
estándar, implementar un TestContext
o un ContextCache
personalizado, o complementar los conjuntos estándar de implementaciones ContextCustomizerFactory
y TestExecutionListener
, etc. Para proporcionar este control de bajo nivel sobre el funcionamiento del marco TestContext, el marco Spring proporciona una estrategia de arranque.
TestContextBootstrapper
define una interfaz SPI para cargar el marco TestContext. El TestContextBootstrapper
es utilizado por el TestContextManager
para cargar implementaciones de TestExecutionListener
para la prueba actual y para construir el TestContext
que gestiona. Puede configurar una estrategia de arranque personalizada para una clase de prueba (o jerarquía de clases de prueba) especificando la anotación @BootstrapWith
directamente o como una metaanotación. Si el programa previo no está configurado explícitamente con la anotación @BootstrapWith
, se utiliza el DefaultTestContextBootstrapper
o el WebTestContextBootstrapper
, dependiendo de la presencia del anotación de código @WebAppConfiguration
.
Debido a que es probable que la interfaz SPI TestContextBootstrapper
cambie en el futuro (para adaptarse a nuevos requisitos), recomendamos encarecidamente a los desarrolladores que no implementen esta interfaz directamente, sino que extiendan AbstractTestContextBootstrapper
o una de sus subclases específicas.
GO TO FULL VERSION