Как смоделировать объект, который не установлен в переменную - PullRequest
1 голос
/ 22 мая 2019

В настоящее время я пишу модульные тесты для устаревшего кода. Мне нужно смоделировать объект для «doReturn» при вызове функции этого объекта. Однако этот объект создается в той же строке, в которой он вызывается, и никогда не присваивается переменной. Есть ли способ смоделировать это возвращаемое значение, не касаясь исходного кода?

Устаревшая строка кода, содержащая вызов функции, которая должна возвращать макетированный список:

List<Map<String, String>> referenceDataList = new ReferenceDataInquiryMapper().execute(referenceDataInquiry);

Моя попытка издеваться над этим вызовом "execute":

List<Map<String, String>> referenceDataList = new ArrayList<Map<String, String>>();
//Add data to referenceDataList
ReferenceDataInquiryMapper referenceDataInquiryMapper = PowerMockito.mock(ReferenceDataInquiryMapper.class);
PowerMockito.doReturn(referenceDataList).when(referenceDataInquiryMapper,"execute",Mockito.any());

Я также попытался:

PowerMockito.doReturn(referenceDataList).when(new ReferenceDataInquiryMapper(),"execute",Mockito.any());

Что выдает ошибку PowerMockito

А также это:

PowerMockito.doReturn(referenceDataList).when(PowerMockito.mock(ReferenceDataInquiryMapper.class),"execute",Mockito.any());

Который выдает то же исключение, что и моя первая попытка.

Вместо того, чтобы возвращать значение Mock, первая строка, размещенная выше, пытается создать реальный новый объект при запуске теста и выдает исключение. Можно ли на самом деле издеваться над этим кодом?

~ Спасибо

1 Ответ

0 голосов
/ 24 мая 2019

когда создается новый объект, нам нужно вернуть его макет.Добавьте когдаNew, как показано ниже.

List<Map<String, String>> referenceDataList = new ArrayList<Map<String, String>>();
//Add data to referenceDataList
ReferenceDataInquiryMapper referenceDataInquiryMapper = 
PowerMockito.mock(ReferenceDataInquiryMapper.class);

PowerMockito.whenNew(ReferenceDataInquiryMapper.class).thenReturn( referenceDataInquiryMapper);

PowerMockito.doReturn(referenceDataList).when( referenceDataInquiryMapper,"execute",Mockito.any());
...