I am new to Junit Mockito testcase. I am trying to write REST API controller class .But facing some issue.Can someone please help me on writing the test case.
`@RestController
@RequestMapping(“/storage-connector”)
public class BigQueryController {
private static final Logger logger = LoggerFactory.getLogger(BigQueryController.class);
@Autowired
private BigQueryService bigQueryService;
boolean isSchedulerStarted = false;
//boolean isSchedulerStarted = true;
@PostMapping("/postBigqueryData")
public ResponseEntity<MessageDTO> postDatatoBigquery(@RequestParam("schedular") boolean schedular) throws NoSuchAlgorithmException, KeyManagementException {
/* TrustManager[] trustAllCerts = new TrustManager[]
{new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sc = SSLContext.getInstance(CommonConstants.SSL);
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());*/
MessageDTO result=new MessageDTO();
if (schedular) {
isSchedulerStarted = true;
result=postDatatoBigqueryScheduled();
if(result.getMessage().equalsIgnoreCase("Success")){
return ResponseEntity.ok(result);
}else{
return ResponseEntity.ok(result);
}
} else if (!schedular && isSchedulerStarted) {
isSchedulerStarted = false;
result=postDatatoBigqueryScheduled();
handleSchedulerTime();
result.setMessage(CommonConstants.SCHEDULAR_STOPPED);
return ResponseEntity.ok(result);
}
return ResponseEntity.ok(result);
}
Also one more test case on
`your t@RestController
@RequestMapping(“/storage-connector”)
public class BigQueryController {
private static final Logger logger = LoggerFactory.getLogger(BigQueryController.class);
@Autowired
private BigQueryService bigQueryService;
boolean isSchedulerStarted = false;
//boolean isSchedulerStarted = true;
@PostMapping("/postBigqueryData")
public ResponseEntity<MessageDTO> postDatatoBigquery(@RequestParam("schedular") boolean schedular) throws NoSuchAlgorithmException, KeyManagementException {
/* TrustManager[] trustAllCerts = new TrustManager[]
{new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sc = SSLContext.getInstance(CommonConstants.SSL);
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());*/
MessageDTO result=new MessageDTO();
if (schedular) {
isSchedulerStarted = true;
result=postDatatoBigqueryScheduled();
if(result.getMessage().equalsIgnoreCase("Success")){
return ResponseEntity.ok(result);
}else{
return ResponseEntity.ok(result);
}
} else if (!schedular && isSchedulerStarted) {
isSchedulerStarted = false;
result=postDatatoBigqueryScheduled();
handleSchedulerTime();
result.setMessage(CommonConstants.SCHEDULAR_STOPPED);
return ResponseEntity.ok(result);
}
return ResponseEntity.ok(result);
}ext``
your text
I have written like
` @Test
public void testPostDatatoBigquery() throws Exception {
boolean schedular = true;
MessageDTO messageDTOProxy = new MessageDTO();
messageDTOProxy.setJobId("e101");
messageDTOProxy.setMessage("Success");
when(bigQueryService.postDatatoBigquery()).thenReturn(messageDTOProxy);
// when(bigQueryService.postDatatoBigquery().thenReturn(ArgumentMatchers.anyObject());
ResponseEntity<MessageDTO> messageDTO = bigQueryController.postDatatoBigquery(schedular);
assertNotNull(messageDTO);
///MockMvcRequestBuilders.post("/postBigqueryData").contentType(MediaType.APPLICATION_JSON)
// assertThat(messageDTO.getStatusCodeValue()).isEqualTo(201);
ObjectMapper mapper=new ObjectMapper();
String scheduler1=mapper.writeValueAsString(schedular);
MockHttpServletRequestBuilder requestBuilder=MockMvcRequestBuilders.post("/postBigqueryData").contentType(MediaType.APPLICATION_JSON)
.content(scheduler1);
ResultActions perform=this.mockMvc.perform(requestBuilder);
MvcResult andReturn= perform.andReturn();
MockHttpServletResponse response= andReturn.getResponse();
int status= response.getStatus();
assertEquals(201,status);
}
`But getting NullPointerException due to getting null in requestBuilder.
MockHttpServletRequestBuilder requestBuilder=MockMvcRequestBuilders.post(“/postBigqueryData”).contentType(MediaType.APPLICATION_JSON)
.content(scheduler1);