ConfigDataApplicationContextInitializer
ConfigDataApplicationContextInitializer
es un ApplicationContextInitializer
que se puede aplicar a pruebas para cargar archivos application.properties
para Spring Boot. Puede usarlo si no necesita el conjunto completo de funciones proporcionadas por la anotación @SpringBootTest
, como se muestra en el siguiente ejemplo:
@ContextConfiguration(clases = Config.class, inicializadores = ConfigDataApplicationContextInitializer.class) clase MyConfigFileTest { //... }
@ContextConfiguration(clases = [Config::class], inicializadores = [ConfigDataApplicationContextInitializer::class]) clase MyConfigFileTest { //... }
ConfigDataApplicationContextInitializer
no brindará soporte para incrustar el
@Value("${...}" )
anotación. Su único trabajo es garantizar que los archivos
application.properties
se carguen en el
Environment
de Spring. Para admitir la anotación
@Value
, debe configurar adicionalmente la anotación
PropertySourcesPlaceholderConfigurer
o usar la anotación
@SpringBootTest
, que la configurará automáticamente. .
PruebaValoresPropiedad
La clase TestPropertyValues
le permite agregar rápidamente propiedades a un ConfigurableEnvironment
o ConfigurableApplicationContext
. Puedes llamarlo usando las líneas key=value
, como se muestra a continuación:
clase MyEnvironmentTests { @Prueba anular testPropertySources() { Entorno MockEnvironment = nuevo MockEnvironment(); TestPropertyValues.of("org=Spring", "nombre=Boot").applyTo(entorno); afirmarQue(environment.getProperty("nombre")).isEqualTo("Arranque"); } }
clase MyEnvironmentTests { @Prueba divertido testPropertySources() { entorno val = entorno simulado() TestPropertyValues.of("org=Spring", "nombre=Boot").applyTo(entorno) afirmarQue(environment.getProperty("nombre")).isEqualTo("Arranque") } }
Captura de salida
OutputCapture
es una Extensión
para JUnit que se puede utilizar para capturar la salida de System.out
y System.err
. Para usarlo, agregue la anotación @ExtendWith(OutputCaptureExtension.class)
e inyecte CapturedOutput
como argumento en el constructor de su clase de prueba o método de prueba como este:
@ExtendWith(OutputCaptureExtension.class) clase MyOutputCaptureTests { @Prueba void testName (salida CapturedOutput) { System.out.println("¡Hola mundo!"); afirmarque(salida).contiene("Mundo"); } }
@ExtendWith(OutputCaptureExtension::clase) clase MyOutputCaptureTests { @Prueba nombre de prueba divertido (salida: ¿Salida capturada?) { println("¡Hola mundo!") afirmar que (salida). contiene ("Mundo") } }
PlantillaTestRest
TestRestTemplate
es una alternativa conveniente al RestTemplate
de Spring que es útil para pruebas de integración. Puede obtener una plantilla básica o una que envíe autenticación HTTP básica (con nombre de usuario y contraseña). En cualquier caso, la plantilla es tolerante a fallos. Esto significa que su lógica operativa es conveniente para realizar pruebas y no genera excepciones para los errores 4xx y 5xx. En cambio, dichos errores se pueden detectar a través del ResponseEntity
devuelto y su código de estado.
WebTestClient
que también es bueno para
pruebas de integración en WebFlux y para
pruebas de un extremo a otro en WebFlux y MVC. A diferencia de
TestRestTemplate
, proporciona una API fluida para agregar aserciones.
Se recomienda, aunque no es obligatorio, utilizar el cliente HTTP Apache (versión 4.3.2 o superior). Si está en su classpath, la plantilla TestRestTemplate
responderá a esto y configurará el cliente en consecuencia. Si está utilizando el cliente HTTP Apache, se agregan algunas características adicionales que son útiles para realizar pruebas:
-
No se realiza un seguimiento de los redireccionamientos (por lo que puede agregar reclamos para la ubicación de respuesta).
-
Las cookies se ignoran (por lo que la plantilla no guarda el estado).
Se puede crear una instancia de TestRestTemplate
directamente en las pruebas de integración, como se muestra en el siguiente ejemplo:
clase MisPruebas { plantilla TestRestTemplate final privada = new TestRestTemplate(); @Prueba solicitud de prueba nula() { ResponseEntity<String> encabezados = this.template.getForEntity("https://myhost.example.com/example", String.class); afirmarQue(headers.getHeaders().getLocation()).hasHost("otro.ejemplo.com"); } }
clase MisPruebas { plantilla de valor privado = TestRestTemplate() @Prueba divertida pruebaRequest() { encabezados val = template.getForEntity("https://myhost.example.com/example", String::class.java) afirmarQue(encabezados.encabezados.ubicación).hasHost("otro.ejemplo.com") } }
Además, si usa la anotación @SpringBootTest
con WebEnvironment.RANDOM_PORT
o WebEnvironment.DEFINED_PORT
, puede inyectar un completamente configurado TestRestTemplate
y comienza a usarlo. Si es necesario, se pueden aplicar configuraciones adicionales a través del bean RestTemplateBuilder
. Cualquier URL que no especifique un host y un puerto se conecta automáticamente al servidor integrado, como se muestra en el siguiente ejemplo:
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) clase MySpringBootTest { @autocableado plantilla TestRestTemplate privada; @Prueba solicitud de prueba nula() { Encabezados HttpHeaders = this.template.getForEntity("/ejemplo", String.class).getHeaders(); afirmarQue(headers.getLocation()).hasHost("otro.ejemplo.com"); } @TestConfiguration(proxyBeanMethods = falso) clase estática RestTemplateBuilderConfiguration { @Frijol RestTemplateBuilder restTemplateBuilder() { devolver nuevo RestTemplateBuilder().setConnectTimeout(Duration.ofSeconds(1)) .setReadTimeout(Duración.deSeconds(1)); } } }
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) clase MySpringBootTests(@plantilla de valor Autowired: TestRestTemplate) { @Prueba divertida pruebaRequest() { encabezados val = template.getForEntity("/ejemplo", String::class.java).headers afirmarQue(encabezados.ubicación).hasHost("otro.ejemplo.com") } @TestConfiguration(proxyBeanMethods = falso) clase interna RestTemplateBuilderConfiguration { @Frijol divertido restTemplateBuilder(): RestTemplateBuilder { devolver RestTemplateBuilder().setConnectTimeout(Duración.deSeconds(1)) .setReadTimeout(Duración.deSeconds(1)) } } }
GO TO FULL VERSION