Prueba la lógica de dominio con JUnit puro y sin contexto de Spring, ya que la inyección por constructor lo vuelve trivial. Prueba la persistencia contra una base de datos real en un contenedor en vez de un sustituto en memoria, porque los dialectos difieren y las migraciones también hay que probarlas. Usa slices de test en vez de arrancar la aplicación entera para los tests de controlador o de repositorio, y sustituye la API externa a nivel HTTP para que tu código de cliente, los reintentos y el parseo se ejecuten de verdad.
Por qué lo preguntan los entrevistadores
El entrevistador quiere saber si tus tests atrapan regresiones o solo ejercitan mocks. Preferir una base de datos real en contenedor a una en memoria, usar slices en lugar de un contexto completo por velocidad, y simular en la frontera HTTP en vez de mockear tu propio repositorio son todas señales de una suite en la que la gente confía de verdad. El tiempo de ejecución también importa, porque una suite lenta se acaba saltando.
Cómo estructurar tu respuesta
- Separa las capas y asigna un estilo de test a cada una.
- Usa una base de datos real en contenedor y ejecuta las migraciones en el test.
- Sustituye el HTTP externo en vez de mockear tu propio cliente.
- Mantén la suite rápida y aislada para que se siga confiando en ella.
Ejemplo de respuesta
La mayor parte de la lógica recibe tests unitarios normales sin framework alguno: la inyección por constructor significa que puedo instanciar la clase con dobles de prueba para sus colaboradores y corre en milisegundos. Para la persistencia uso una base de datos real del mismo motor y versión en un contenedor, con las migraciones aplicadas como parte del arranque del test, así la propia migración se verifica en cada ejecución. Una base de datos en memoria es más rápida pero miente sobre dialectos y restricciones, y he publicado una consulta que funcionaba en los tests y fallaba en producción por eso. Para la capa web uso un slice que carga solo el controlador y la serialización, no la aplicación entera, porque arrancarlo todo en cada test es lo que hace que las suites tarden veinte minutos. La API externa se sustituye a nivel HTTP con un servidor simulado, así que mi configuración de cliente, los timeouts, la lógica de reintentos y el mapeo JSON se ejercitan de verdad. Además reutilizo contenedores durante la ejecución y hago rollback de cada test en una transacción, lo que mantiene las cosas aisladas y paralelizables.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Por qué no usar una base de datos en memoria por velocidad?
- ¿Cómo pruebas el comportamiento de reintento y timeout de tu cliente?
- ¿Qué compruebas para detectar una consulta N más uno en un test?
Más preguntas para Desarrollador Java
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas