Как я могу высмеять такую ситуацию
ObjectOfBeanClass.getMapObject().get("String_Key_To_Return_Object")
Я пробую следующие способы:
1) when(ObjectOfBeanClass.getMapObject().get("String_Key_To_Return_Object")).thenReturn(Object);
In this Case, it throws an exception that getMapObject() Should return a Map_Object
2) doReturn(Object).when(ObjectOfBeanClass.getMapObject()).thenReturn(Object);
in this case, it shows following error org.mockito.exceptions.misusing.UnfinishedStubbingException: Unfinished stubbing detected here:
Вы имитируете карту в целом и вызов в два этапа.
Map<String> map = mock(Map.class);
when(map.get(yourString)).thenReturn(object);
when(objectOfBeanClass.getMap()).thenReturn(map);
Или, если ваш испытуемый - objectOfBeanClass
, позвоните
objectOfBeanClass.setMap(map);
Как указывает Хрилис, вы также можете создать реальный экземпляр Map
вместо того, чтобы издеваться над ним:
Map<String> map = Collections.singletonMap("String_Key", object);
when(objectOfBeanClass.getMap()).thenReturn(map);
что нормально, если вы не хотите использовать карту для verify()
или чего-то в этом роде.
@chrylis Это правда, хотя вы можете использовать карту для проверки, которая возможна только на имитации. Я отредактировал ответ.
Вообще говоря, однако, если информация на карте необходима, она будет иметь какое-то отражение в остальном, что происходит (например, она будет передана исходящему вызову метода в сервисе, который имитируется или доступен через геттер. на тестируемом классе). Если он не оказывает видимого влияния на поведение, вероятно, его просто нужно полностью удалить.
Практически никогда не стоит издеваться над интерфейсом вроде
Map
. Просто используйтеCollections.singletonMap
или настоящийHashMap
.