In my unit test i want to mock the interaction with elasticsearch by doing the following
when(cityDefinitionRepository.findCitiesNearby(geoPoint, SOURCE, 2)).thenReturn(cityDefinitionsArrival);
when(cityDefinitionRepository.findCitiesNearby(geoPoint2, SOURCE, 2)).thenReturn(cityDefinitionsDeparture);
SearchResult results = benerailService.doSearch(interpretation, 2, false);
the doSearch method contains
departureCityDefinitions = cityDefinitionRepository.findCitiesNearby(geo, SOURCE, distance);
When i debug my code i see that mockito is called in my doSearch method but it does not return the cityDefinitionsArrival object. This is probably because geoPoint and geo are two different objects.
The geoPoint and geo object are both elasticsearch GeoPoints which contain the same latitude and longitude.
I managed to get this to work by doing
when(cityDefinitionRepository.findCitiesNearby(any(geoPoint.getClass()), eq(SOURCE), eq(2))).thenReturn(cityDefinitionsArrival);
when(cityDefinitionRepository.findCitiesNearby(any(geoPoint2.getClass()), eq(SOURCE), eq(2))).thenReturn(cityDefinitionsDeparture);
But now it ignores my latitude and longitude values and accepts any object of the GeoPoint class. This is a problem because in my doSearch method i have two usages of the findCitiesNearby, each with different latitude and longitude and I need to mock them both individually.
Is this possible with Mockito?
The cityDefinitionsArrival and cityDefinitionsDeparture are both ArrayLists, the SOURCE is a String value and the geo and geoPoint object:
GeoPoint geoPoint = new GeoPoint(50.850449999999995, 4.34878);
GeoPoint geoPoint2 = new GeoPoint(48.861710, 2.348923);
double lat = 50.850449999999995;
double lon = 4.34878;
GeoPoint geo = new GeoPoint(lat, lon);
double lat2 = 48.861710;
double lon2 = 2.348923;
GeoPoint geo2 = new GeoPoint(lat2, lon2);