Junit using SpringbootTest - salmanbaig8/imp GitHub Wiki

import static org.springframework.test.web.client.match.MockRestRequestMatchers.method; import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus;

@ActiveProfiles("test") @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class ControllerTest { @Autowired private WebApplicationContext webApplicationContext; @LocalServerPort private int port; private MockRestServiceServer mockServer; private MockMvc mockMvc; private MvcResult result; HttpHeaders headers = new HttpHeaders(); RestTemplate restTemplate = new RestTemplate(); ObjectMapper mapper = new ObjectMapper(); HttpEntity entity = new HttpEntity<>(ObjectModel, headers); ResponseEntity response = null; String expected = null; String url = null; Map<String, Object> m1; Map<String, Object> m2;

    @Before
public void setUp() throws Exception {
	mockServer = MockRestServiceServer.createServer(restTemplate);
            headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
	headers.setContentType(MediaType.APPLICATION_JSON);
}

   @Test
public void testMethod() {
    url = "/API/fetch"; 
    expected = json Response String;
mockServer(url, expected);
response = responseEntity(url, entity);
AssertApi(expected, response);
}
   private String createURLWithPort(String uri) throws UnknownHostException {
	String localhost =  InetAddress.getLocalHost().getHostAddress();
	return "http://" + localhost + ":" + port + uri;
}
private void mockServer(String url, String expected) {
	try {
		mockServer
				.expect(ExpectedCount.once(),
						requestTo(new URI(createURLWithPort(url))))
				.andExpect(method(HttpMethod.PUT))
				.andRespond(
						withStatus(HttpStatus.OK).contentType(
								MediaType.APPLICATION_JSON).body(expected));

	} catch (UnknownHostException | URISyntaxException e) {
		logger.error(e.getMessage(), e.getCause());
	}
}

private ResponseEntity<ObjectResponse> responseEntity(String url, HttpEntity<ObjectModel> entity) {
	try {
		response = restTemplate
				.exchange(
						createURLWithPort(url),
						HttpMethod.PUT, entity,
						ObjectResponse.class);
	} catch (RestClientException | UnknownHostException e) {
		logger.error(e.getMessage(), e.getCause());
	}
	return response;
}

@SuppressWarnings("unchecked")
private void AssertApi(String expected, ResponseEntity<ObjectResponse> response){
	try {
		m1 = (mapper.readValue(expected, Map.class));
		m2 = (mapper.readValue(mapper.writeValueAsString(response.getBody()), Map.class));
		logger.debug("Response Body:" + mapper.writeValueAsString(response.getBody()) + "Response Headers: " + response.getHeaders() + "Response Status: " + response.getStatusCode());

	} catch (IOException e) {
		logger.error(e.getMessage(), e.getCause());
	}
	 Assert.assertEquals(m1, m2);  
}

    @Test
public void testUploadFile() throws Exception {
	url = "API/upload";
	String file = "C:/Users/Public/Pictures/Sample Pictures/Desert.jpg";
	String fileName = "TestUpload.jpg";
	ResourceLoader resourceLoader = new DefaultResourceLoader();
	Resource resource = resourceLoader.getResource("file:"+ file);
	MockMultipartFile firstFile = new MockMultipartFile("uploadFile", fileName , "text/plain", resource.getInputStream());
            MockMultipartFile jsonFile = new MockMultipartFile("ObjectModel", "", "application/json", mapper.writeValueAsBytes(ObjectModel));
    
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    mockMvc.perform(MockMvcRequestBuilders.fileUpload(createURLWithPort(url))
                    .file(firstFile)
                    .file(jsonFile)
                    .content("success"));
}
   @Test
public void testDownload() {
	url = "/API/download"; 

	mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
	try {
		result = mockMvc.perform(MockMvcRequestBuilders.post(createURLWithPort(url))
				.content(mapper.writeValueAsString(ObjectModel))
				.contentType(MediaType.APPLICATION_JSON))
				.andExpect(MockMvcResultMatchers.status().is(200)).andReturn();
		
		logger.debug("File Length: " + result.getResponse().getContentAsByteArray().length);
		Assert.assertEquals(200, result.getResponse().getStatus());
        logger.debug(result.getResponse().getContentAsByteArray().length);
        Assert.assertEquals(845941, result.getResponse().getContentAsByteArray().length);
        Assert.assertEquals(MediaType.APPLICATION_OCTET_STREAM_VALUE, result.getResponse().getContentType());

Different approach

// DefaultMockMvcBuilder defualtBuilder = MockMvcBuilders.webAppContextSetup(this.webApplicationContext); // this.mockMvc = defualtBuilder.build(); //
// ResultMatcher ok = MockMvcResultMatchers.status().isOk(); // try { // MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.post(createURLWithPort(url)) // .contentType(MediaType.APPLICATION_JSON_VALUE) // .content(mapper.writeValueAsString(ObjectModel)); // // result = this.mockMvc.perform(builder) // .andExpect(ok) // .andReturn(); ######################################### // TO Print the byte Array // this.mockMvc.perform(builder) // .andExpect(ok) // .andDo(MockMvcResultHandlers.print()); // }