I am calling external service using send() method of HttpClient's instance.
public class MyProgram {
private String producerEndpoint;
private HttpClient httpClient;
@Autowired
public EsignEventProducer(@Value("${producer.http.endpoint}")String producerEndpoint) {
this.producerEndpoint=producerEndpoint;
this.httpClient=HttpClient.newBuilder().build();
}
public void sendMessage(ObjectMapper objectMapper, String jsonString, String xCorrelationId) throws Exception {
ProduceRequest produceRequest=new ProduceRequest();
ProduceRecord produceRecord=new ProduceRecord();
produceRecord.setValue(Optional.of(objectMapper.readTree(jsonString)));
produceRequest.setRecords(Arrays.asList(produceRecord));
HttpRequest request=HttpRequest.newBuilder()
.uri(URI.create(producerEndpoint))
.POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(produceRequest)))
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString())
.setHeader(IdTypeConstants.XCORRELATIONID, xCorrelationId)
.build();
httpClient.send(request, HttpResponse.BodyHandlers.ofString());
}
}
While creating Junit Testcases, I am mocking httpClient.send(request, HttpResponse.BodyHandlers.ofString());
as given below, but still instead of mocking, it is calling actual method.
Following is Junit Test class.
class MyProgramTest {
@InjectMocks
private MyEventProducer myEventProducer;
private HttpClient httpClient;
private HttpResponse<Object> httpResponse;
@Mock
private HttpRequest request;
private MyEvent schema;
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
schema = new MyEvent();
schema.setId("123");
schema.setName("PACKAGE_COMPLETE");
schema.setCreatedDate("2021-10-20T16:17:58.408Z");
schema.setSessionUser("dummySession");
httpClient = Mockito.mock(HttpClient.class);
httpResponse = Mockito.mock(HttpResponse.class);
}
@Test
void testSendMessage() throws Exception {
ReflectionTestUtils.setField(myEventProducer, "producerEndpoint", "http://localhost:8080/endpointservice/my_topic");
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(schema);
String xCorrelationId = "dummyXCorrelationId";
Mockito.when(httpClient.send(Mockito.any(HttpRequest.class), HttpResponse.BodyHandlers.ofString())).thenReturn(null);
myEventProducer.sendMessage(objectMapper, jsonString, xCorrelationId);
verify(httpClient).send(request, HttpResponse.BodyHandlers.ofString());
}
}
I am using Junit 5 with gradle and httpClient from java.net package. Please help, Thanks