Cuando usamos MockMvc para testear controladores de Spring, es muy útil disponer del máximo de información referente a la petición realizada desde el test. Una forma muy sencilla es indicarle al “builder” que queremos que muestre en la salida del test dicha información.
import org.junit.Before; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; @RunWith(MockitoJUnitRunner.class) public abstract class MyTestClass { MockMvc mvc; @Mock MyRepository myRepository; @Before public void initialize() { mvc = MockMvcBuilders.standaloneSetup(new MyController(new MyService(myRepository))); .alwaysDo(print()) // Esta es la línea importante .build(); } }
Esto hace que para cada petición se se hace desde un test unitario via MockMvc muestre una información detallada de la misma:
MockHttpServletRequest: HTTP Method = GET Request URI = /my-request-path Parameters = {my-request-param=[my-request-param-value]} Headers = {my-header=[my-header-value]} Handler: Type = com.example.MyController Method = public org.springframework.http.ResponseEntity<java.util.List<com.example.MyResponseClass>> com.example.MyController.myMethod(com.example.MyRequestBodyClass) Async: Async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 200 Error message = null Headers = {Content-Type=[application/json;charset=UTF-8]} Content type = application/json;charset=UTF-8 Body = [{"field":"value"}] Forwarded URL = null Redirected URL = null Cookies = []
Tener en cuenta que hasta versión 5.0 de Spring Framework no se muestra el contenido de la request tal y como se puede leer en el siguiente jira:
https://jira.spring.io/browse/SPR-14717