Spring Framework TEST RESTful Web Service (Controller) Offline i.e. No Server, No Database Spring Framework TEST RESTful Web Service (Controller) Offline i.e. No Server, No Database spring spring

Spring Framework TEST RESTful Web Service (Controller) Offline i.e. No Server, No Database


Here is one suggestion that should give you some ideas. I assume that you are familiar with the SpringJUnit4ClassRunner and the @ContextConfiguration. Start by creating an test application context that contains PcUserController and a mocked PcUserService. In the example PcUserControllerTest class below, Jackson is used to convert JSON messages and Mockito is used for mocking.

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(/* Insert test application context here */)public class PcUserControllerTest {    MockHttpServletRequest requestMock;    MockHttpServletResponse responseMock;    AnnotationMethodHandlerAdapter handlerAdapter;    ObjectMapper mapper;    PcUser pcUser;    @Autowired    PcUserController pcUserController;    @Autowired    PcUserService pcUserServiceMock;    @Before    public void setUp() {        requestMock = new MockHttpServletRequest();        requestMock.setContentType(MediaType.APPLICATION_JSON_VALUE);        requestMock.addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);        responseMock = new MockHttpServletResponse();        handlerAdapter = new AnnotationMethodHandlerAdapter();        HttpMessageConverter[] messageConverters = {new MappingJacksonHttpMessageConverter()};        handlerAdapter.setMessageConverters(messageConverters);        mapper = new ObjectMapper();        pcUser = new PcUser(...);        reset(pcUserServiceMock);    }}

Now, we have all the code needed to create the tests:

@Testpublic void shouldGetUser() throws Exception {    requestMock.setMethod("GET");    requestMock.setRequestURI("/pcusers/1");    when(pcUserServiceMock.read(1)).thenReturn(pcUser);    handlerAdapter.handle(requestMock, responseMock, pcUserController);    assertThat(responseMock.getStatus(), is(HttpStatus.SC_OK));    PcUser actualPcUser = mapper.readValue(responseMock.getContentAsString(), PcUser.class);    assertThat(actualPcUser, is(pcUser));}@Testpublic void shouldCreateUser() throws Exception {    requestMock.setMethod("POST");    requestMock.setRequestURI("/pcusers/create/1");    String jsonPcUser = mapper.writeValueAsString(pcUser);    requestMock.setContent(jsonPcUser.getBytes());    handlerAdapter.handle(requestMock, responseMock, pcUserController);    verify(pcUserServiceMock).create(pcUser);}