# Quiz de la fase 5: Testing de Integración, APIs y Carga

> 10 afirmaciones de verdadero o falso, con la respuesta explicada, sobre los días de esta fase del plan JavaMastery.

Versión interactiva: https://aprende-java.webs-economicas.es/quiz/fase-5/

## Afirmaciones

### 1. Si un test pasa con H2 en memoria, también pasará con PostgreSQL.

**Respuesta:** Falso. H2 tiene otro dialecto, otros tipos y otras restricciones. Testcontainers ejecuta los tests contra el mismo motor que usas en producción.

**Para recordarlo:** Prueba con la misma base de datos que en producción: Testcontainers lo pone fácil.

Se estudia en el [día 20: Testing de Integración Real con Testcontainers y PostgreSQL](https://aprende-java.webs-economicas.es/dias/testcontainers-postgresql.md).

### 2. Con `@ServiceConnection` (Spring Boot 3.1+), Spring configura la conexión al contenedor de Testcontainers sin `@DynamicPropertySource`.

**Respuesta:** Verdadero. Spring Boot lee la URL, el usuario y la contraseña del contenedor y crea los detalles de conexión por ti.

**Para recordarlo:** Boot 3.1+: `@Container` + `@ServiceConnection` y te olvidas de configurar la URL.

Se estudia en el [día 20: Testing de Integración Real con Testcontainers y PostgreSQL](https://aprende-java.webs-economicas.es/dias/testcontainers-postgresql.md).

### 3. `@DataJpaTest` levanta el contexto completo de la aplicación, controladores incluidos.

**Respuesta:** Falso. Es un test de rebanada: solo carga JPA, los repositorios y el `DataSource`. Para la aplicación entera está `@SpringBootTest`.

**Para recordarlo:** `@DataJpaTest` = solo persistencia. Contexto completo = `@SpringBootTest`.

Se estudia en el [día 20: Testing de Integración Real con Testcontainers y PostgreSQL](https://aprende-java.webs-economicas.es/dias/testcontainers-postgresql.md).

### 4. `@WebMvcTest` carga la capa web y deja fuera los servicios y repositorios, que hay que simular.

**Respuesta:** Verdadero. Se combina con `@MockitoBean` (o el anterior `@MockBean`) para las dependencias del controlador.

**Para recordarlo:** `@WebMvcTest` prueba el controlador; lo que hay detrás se simula con mocks.

Se estudia en el [día 20: Testing de Integración Real con Testcontainers y PostgreSQL](https://aprende-java.webs-economicas.es/dias/testcontainers-postgresql.md).

### 5. En la pirámide de testing, lo habitual es tener más tests unitarios que tests end-to-end.

**Respuesta:** Verdadero. Los unitarios son rápidos y precisos al señalar el fallo; los end-to-end son lentos y frágiles, así que se reservan para los flujos críticos.

**Para recordarlo:** Muchos unitarios, algunos de integración y pocos end-to-end.

Se estudia en el [día 20: Testing de Integración Real con Testcontainers y PostgreSQL](https://aprende-java.webs-economicas.es/dias/testcontainers-postgresql.md).

### 6. `@WebMvcTest` arranca un servidor HTTP real en un puerto libre.

**Respuesta:** Falso. No abre ningún puerto: `MockMvc` ejecuta la petición por la pila de Spring MVC en memoria. El servidor real lo arranca `@SpringBootTest(webEnvironment = RANDOM_PORT)`.

**Para recordarlo:** MockMvc = sin puerto y rápido. RANDOM_PORT + REST Assured = HTTP real y lento.

Se estudia en el [día 21: Tests de API y de Carga: MockMvc, REST Assured, BDD y JMeter](https://aprende-java.webs-economicas.es/dias/tests-api-carga-mockmvc-rest-assured-jmeter.md).

### 7. REST Assured contra una aplicación arrancada con `RANDOM_PORT` prueba también los filtros de seguridad y la serialización reales.

**Respuesta:** Verdadero. La petición viaja por HTTP a la aplicación completa, así que pasa por todos los filtros, convertidores y transacciones, igual que la de un cliente.

**Para recordarlo:** Reserva REST Assured para los flujos críticos de punta a punta.

Se estudia en el [día 21: Tests de API y de Carga: MockMvc, REST Assured, BDD y JMeter](https://aprende-java.webs-economicas.es/dias/tests-api-carga-mockmvc-rest-assured-jmeter.md).

### 8. En una prueba de carga, la media del tiempo de respuesta es el mejor indicador de la experiencia de los usuarios.

**Respuesta:** Falso. La media esconde las peticiones lentas entre muchas rápidas. Los percentiles 95 y 99 muestran lo que sufren los usuarios con peor experiencia.

**Para recordarlo:** Carga: mira p95, p99 y errores; olvida la media.

Se estudia en el [día 21: Tests de API y de Carga: MockMvc, REST Assured, BDD y JMeter](https://aprende-java.webs-economicas.es/dias/tests-api-carga-mockmvc-rest-assured-jmeter.md).

### 9. Las pruebas de carga con JMeter se ejecutan en modo no interactivo (`-n`).

**Respuesta:** Verdadero. La interfaz gráfica consume mucha memoria y CPU y distorsiona los resultados. Se usa para diseñar el plan; la prueba se lanza con `jmeter -n` y se genera el informe HTML.

**Para recordarlo:** Diseña en la interfaz y ejecuta con `jmeter -n -t plan.jmx -e -o informe/`.

Se estudia en el [día 21: Tests de API y de Carga: MockMvc, REST Assured, BDD y JMeter](https://aprende-java.webs-economicas.es/dias/tests-api-carga-mockmvc-rest-assured-jmeter.md).

### 10. Con Maven, los tests de integración `*IT` los ejecuta Surefire en la fase `test`.

**Respuesta:** Falso. Los `*IT` los ejecuta Failsafe en las fases `integration-test` y `verify`. Surefire ejecuta los `*Test` en la fase `test`.

**Para recordarlo:** `./mvnw test` = unitarios (Surefire). `./mvnw verify` = también integración (Failsafe).

Se estudia en el [día 21: Tests de API y de Carga: MockMvc, REST Assured, BDD y JMeter](https://aprende-java.webs-economicas.es/dias/tests-api-carga-mockmvc-rest-assured-jmeter.md).

