• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

160
Views
¿Por qué usar Spring's Mock MVC cuando tiene pruebas unitarias de sus clases de controlador?

He visto a personas a mi alrededor usando Spring MVC en pruebas unitarias para clases de controlador, lo cual no es útil en lo que es una prueba unitaria.

Se supone que las pruebas unitarias prueban su implementación real de la clase de controlador, y esto se puede lograr de manera más precisa con pruebas simples de Junit en lugar de usar Spring Mock MVC.

Pero luego surge la pregunta, ¿cuál es el uso real de Spring Mock MVC entonces? ¿Para qué lo necesitas?

Digamos que tengo el siguiente código:

 @Controller @RequestMapping("/systemusers") public class SystemUserController { @RequestMapping(value = "/{id}", method = RequestMethod.GET) public String getUser(final Model model) { // some logic to return user's details as json return UserDetailsPage; } }

Puedo probar esta clase/controlador con mayor precisión con Junit que con Spring Mock MVC (todo lo que hace es generar algo de json que se puede afirmar con junit).

También puedo probar con Spring Mock MVC como si usar el punto final correcto devuelve el estado HTTP correcto y la cadena de página de respuesta correcta.

¿Pero eso no significa que estamos probando la funcionalidad de Spring MVC en lugar del código real para el método bajo prueba?

PD: he mantenido el código al mínimo, lo que creo que es suficiente para explicar mi pregunta. Suponga que no hay ningún error de compilación.

almost 3 years ago · Santiago Trujillo
2 answers
Answer question

0

Cuando se trata de la prueba unitaria de las clases de un Controller (o cualquier punto final que esté expuesto), hay dos cosas que validaremos:

(1) La lógica real del controlador en sí misma es independiente, es decir, se invocan o no las llamadas de servicio correctas, etc.

(2) Asignación de URL de solicitud y estado y objeto de respuesta

El elemento (1) anterior es lo que probamos en general con todas las demás clases como Servicios, clases de Utilidad, etc.

El elemento (2) debe cubrirse/probarse adicionalmente para los puntos finales (clases de controlador) que se han expuesto , por lo que si usamos MockMVC de Spring u otra maquinaria para hacerlo, realmente depende de nosotros.

De hecho, MockMVC de Spring nos ayuda a iniciar el contenedor de servlet en memoria y verificar que se invoquen los métodos de controlador correctos y luego hayan aparecido las respuestas correctas.

Desde mi experiencia personal, probar los controladores (para el elemento (2)) me ayudó a resolver los problemas de conflicto de mapeo de URL (por supuesto, dentro del mismo controlador), etc. de inmediato en lugar de solucionarlos en las etapas posteriores del proyecto.

almost 3 years ago · Santiago Trujillo Report

0

Basándome en mi experiencia intentaré responder a tu pregunta.

Lo primero que debemos entender es por qué usamos pruebas unitarias.

Es una verificación adicional utilizada por el desarrollador para escribir un código de trabajo limpio. El código de trabajo limpio significa que cada línea escrita debe hacer lo que se espera que haga. ¿Cómo logras esto? Aquí viene la prueba unitaria. La unidad de código independiente que está escribiendo debe verificarse de forma independiente. El método es la mejor parte del código que representa una plantilla de código de unidad independiente.

Pruebas unitarias para el método

El desarrollador debe escribir una prueba para el método que describa el comportamiento del método. Y las posibles comprobaciones que sigo son ¿está devolviendo el valor esperado considerando todos los escenarios positivos? ¿Funciona en caso de excepción? ¿Está llamando a los métodos subsiguientes correctos?

El desarrollador debe verificar el método llamándolo realmente proporcionando un entorno simulado

A continuación se muestra una posible respuesta a su pregunta. aunque se basa únicamente en los desarrolladores.

Los métodos de controlador están destinados a invocar la llamada de servicio correcta, aceptando la entrada y devolviendo el valor del servicio a la vista. Entonces, puedo pensar en escribir un caso de prueba unitario para el método del controlador, ya que está pensando que es un enfoque correcto. Pero debe verificar el método llamándolo de la misma manera que se llamará en tiempo real. por lo que debe llamar al método del controlador de la misma manera que lo hace MVC. Por lo tanto, es una mejor opción usar MockMVC. MockMVC también es útil para verificar las direcciones URL, los parámetros de entrada, la respuesta y el estado que forman parte del método del controlador. Teniendo en cuenta todo esto, lo convierte en una unidad de código independiente.

Espero que esto aclare tu duda.

almost 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error