Ejercicio de programación: Reto Testing de RestController
Este ejercicio de programación está diseñado para poner a prueba tus conocimientos en SpringBoot. Es un ejercicio de nivel intermedio que requiere conocimientos sólidos de la tecnología.
Información adicional del ejercicio
Crear un test de controlador REST que valide respuestas JSON usando MockMvc y verificaciones con jsonPath.
Contenido del ejercicio
Crea el código de test para un controlador REST que gestiona productos.
El controlador tiene un endpoint GET /api/productos/1 que devuelve un producto en formato JSON con los campos id, nombre y precio.
Debes implementar:
- El código d una clase de test anotada con
@WebMvcTestque especifique el controladorProductoController - Inyectar
MockMvcusando@Autowired - Crear un mock del servicio
ProductoServiceusando@MockBean - Implementar un método de test que:
- Configure el mock para que
obtenerProductoPorId(1L)devuelva un producto con id=1, nombre="Laptop" y precio=999.99 - Realice una petición GET a
/api/productos/1aceptando JSON - Verifique que el status sea 200 OK
- Verifique que el content-type sea JSON
- Use
jsonPathpara validar que el camponombresea "Laptop" - Use
jsonPathpara validar que el campopreciosea 999.99
Empezar creando la clase de test con las anotaciones necesarias, luego inyectar las dependencias y finalmente implementar el método de test con todas las verificaciones usando mockMvc.perform() y andExpect().
Este es el código que debes testear:
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
class User {
private Long id;
private String name;
private String email;
public User() {}
public User(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// getters y setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
@RestController
class UserController {
@GetMapping("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
// Usuario hardcodeado como se especifica en el enunciado
User user = new User(1L, "Juan Pérez", "juan@email.com");
return ResponseEntity.ok(user);
}
}
class Producto {
private Long id;
private String nombre;
private Double precio;
public Producto() {}
public Producto(Long id, String nombre, Double precio) {
this.id = id;
this.nombre = nombre;
this.precio = precio;
}
// getters y setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getNombre() { return nombre; }
public void setNombre(String nombre) { this.nombre = nombre; }
public Double getPrecio() { return precio; }
public void setPrecio(Double precio) { this.precio = precio; }
}
// Servicio ProductoService (interfaz)
interface ProductoService {
Producto obtenerProductoPorId(Long id);
}
// Implementación dummy (no usada por el test, pero incluida para completitud)
@Service
class ProductoServiceImpl implements ProductoService {
@Override
public Producto obtenerProductoPorId(Long id) {
// implementación trivial — en la app real buscaría en BD
return new Producto(id, "Producto ejemplo", 0.0);
}
}
@RestController
class ProductoController {
private final ProductoService productoService;
public ProductoController(ProductoService productoService) {
this.productoService = productoService;
}
@GetMapping("/api/productos/{id}")
public ResponseEntity<Producto> obtenerProducto(@PathVariable Long id) {
Producto p = productoService.obtenerProductoPorId(id);
return ResponseEntity.ok(p);
}
}
Lección relacionada
Este ejercicio está relacionado con la lección "Testing controladores REST con json" de SpringBoot. Te recomendamos revisar la lección antes de comenzar.
Ver lección relacionadaMás ejercicios de SpringBoot
Explora más ejercicios de programación en SpringBoot para mejorar tus habilidades y obtener tu certificación.
Ver más ejercicios de SpringBootExplora el curso completo de SpringBoot
Descubre más contenido de SpringBoot con lecciones, ejercicios y módulos organizados para tu aprendizaje.
Lecciones de SpringBoot
Aprende los conceptos fundamentales con tutoriales detallados
Ejercicios de SpringBoot
Practica con más ejercicios de programación
Módulos de SpringBoot
Explora todos los módulos del curso organizados por temas
Curso completo de SpringBoot
Ver el temario completo con todos los contenidos del curso
Todas las tecnologías
Explora todos los cursos de programación disponibles
Cursos que incluyen este ejercicio
Este ejercicio forma parte de los siguientes cursos estructurados con rutas de aprendizaje
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, SpringBoot es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear ejercicios prácticos y contenido educativo de calidad para desarrolladores de todos los niveles.
Solución al ejercicio de programación en SpringBoot
¡Desbloquea la solución completa!
Completa el ejercicio de programación en SpringBoot para acceder a la solución paso a paso, explicaciones detalladas y mejores prácticas.
Practica con ejercicios de programación en SpringBoot
Mejora tus habilidades con cientos de ejercicios de práctica, recibe retroalimentación instantánea y obtén tu certificación cuando estés listo.
Asistente de IA
Aprende de tus errores
Progreso
Mide tu avance
Certificación
Valida tus habilidades
Ejercicios de programación en SpringBoot: Práctica y Certificación
Los ejercicios de programación son fundamentales para dominar SpringBoot. Este ejercicio está diseñado para poner a prueba tus conocimientos prácticos y ayudarte a consolidar lo aprendido en las lecciones teóricas. La práctica constante con ejercicios de programación es la clave para convertirte en un desarrollador experto.
¿Por qué resolver ejercicios de programación?
Resolver ejercicios de programación en SpringBoot te permite:
- Aplicar conocimientos teóricos: Poner en práctica los conceptos aprendidos en las lecciones de SpringBoot.
- Identificar áreas de mejora: Descubrir qué conceptos necesitas reforzar en tu aprendizaje de SpringBoot.
- Prepararte para certificaciones: Los ejercicios te preparan para obtener certificados profesionales en SpringBoot.
- Mejorar tu perfil profesional: Demostrar tus habilidades prácticas en SpringBoot.
Metodología de aprendizaje
Nuestros ejercicios de programación están diseñados siguiendo una metodología probada de aprendizaje progresivo. Cada ejercicio en SpringBoot está cuidadosamente estructurado para llevar tus habilidades al siguiente nivel. Comenzamos con conceptos fundamentales y avanzamos gradualmente hacia desafíos más complejos que reflejan situaciones reales del desarrollo de software profesional.
Certificación y validación de conocimientos
Al completar ejercicios de programación, no solo mejoras tus habilidades técnicas, sino que también puedes obtener certificados que validan tu expertise en SpringBoot. Estos certificados son reconocidos por empresas y pueden ser una gran adición a tu perfil profesional de LinkedIn o tu CV como desarrollador.
Los ejercicios están alineados con los estándares de la industria y cubren desde conceptos básicos hasta técnicas avanzadas de programación en SpringBoot. Cada ejercicio incluye casos de prueba y ejemplos prácticos que te ayudarán a comprender mejor cómo aplicar lo aprendido en proyectos reales.