I want to mock RestHighLevelClient like this: RestHighLevelClient client = mock(RestHighLevelClient.class);, but when I do, it says that mocked client is null. Like it's not properly mocking. So when i try:
ActionsSearchRequest request = ActionsSearchRequest.builder()
.merchSnapshot(merchSnapshot)
.siteName(SiteName.COM)
.searchPhrase("skirt")
.build();
SearchHit hit1 = new SearchHit(1);
SearchHit hit2 = new SearchHit(2);
SearchHits searchHits = new SearchHits(new SearchHit[]{hit1, hit2}, new TotalHits(2, TotalHits.Relation.EQUAL_TO), 1.0f);
SearchResponse searchResponse = mock(SearchResponse.class);
when(searchResponse.getHits()).thenReturn(searchHits);
when(searchResponse.getTotalShards()).thenReturn(1);
when(searchResponse.getSuccessfulShards()).thenReturn(1);
when(searchResponse.getFailedShards()).thenReturn(0);
when(searchResponse.getShardFailures()).thenReturn(null);
when(searchResponse.isTimedOut()).thenReturn(false);
when(client.search(any(SearchRequest.class), any(RequestOptions.class))).thenReturn(searchResponse);
I get NullPointerException on SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); line in class that is being tested.
Here is full test class with annotations and imports, I only skipped names of services used but they are not related and every each of them worked before, the problem started when i needed to change constructor and add rest client and mock it. every other service works.
import org.apache.lucene.search.TotalHits;
import org.elasticsearch.action.search.*;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.document.DocumentField;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockitoAnnotations;
import org.springframework.test.util.ReflectionTestUtils;
import java.io.IOException;
import java.time.Instant;
import java.util.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
class RulePreviewsCollectorServiceTest {
private String comAlias = "com";
private String comNAlias = "comN";
RestHighLevelClient client = mock(RestHighLevelClient.class);
RulePreviewsCollectorService collectorService = createRulePreviewsCollectorService(Service,
Service, Service, Service, Service, client);
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
when(merchSnapshot.getRulesSnapshot()).thenReturn(rulesSnapshot);
client = mock(RestHighLevelClient.class);
collectorService = new RulePreviewsCollectorService(Service, Service, Service,
Service, Service, new Collector(),
new Collector(), new Collector(), client);
ReflectionTestUtils.setField(collectorService, "comAlias", "com");
ReflectionTestUtils.setField(collectorService, "comNAlias", "comN");
}
@Test
void testCollect() throws IOException {
ActionsSearchRequest request = ActionsSearchRequest.builder()
.merchSnapshot(merchSnapshot)
.siteName(SiteName.COM)
.searchPhrase("skirt")
.build();
SearchHit hit1 = new SearchHit(1);
SearchHit hit2 = new SearchHit(2);
SearchHits searchHits = new SearchHits(new SearchHit[]{hit1, hit2}, new TotalHits(2, TotalHits.Relation.EQUAL_TO), 1.0f);
SearchResponse searchResponse = mock(SearchResponse.class);
when(searchResponse.getHits()).thenReturn(searchHits);
when(searchResponse.getTotalShards()).thenReturn(1);
when(searchResponse.getSuccessfulShards()).thenReturn(1);
when(searchResponse.getFailedShards()).thenReturn(0);
when(searchResponse.getShardFailures()).thenReturn(null);
when(searchResponse.isTimedOut()).thenReturn(false);
when(client.search(any(SearchRequest.class), any(RequestOptions.class))).thenReturn(searchResponse);
private RulePreviewsCollectorService createRulePreviewsCollectorService(Service Service,
Service Service,
Service Service,
Service Service,
Service Service,
RestHighLevelClient client) {
return new RulePreviewsCollectorService(Service, Service, Service, Service, Service, new Collector(), new Collector(), new Collector(), client);
}
}