Реальный метод вызывается при использовании powermock - PullRequest
0 голосов
/ 18 февраля 2019
@RunWith(PowerMockRunner.class) 
@PrepareForTest(FCMServiceImpl.class) 
public class PowerMockTest {    

    FCMServiceImpl fcmService;

    FCMService fcmServiceInt;


    @Mock
    private RestTemplate restTemplate;
    @Mock
    private GprsDeviceRepository fcmDeviceRepository;
    @Mock
    private FcmMessagesRepository fcmMessagesRepository;
    @Mock
    private FcmQueryImpl fcmQueryImpl;
    @Mock
    private BatchFcmRepository batchFcmRepository;
    @Mock
    private BatchFcmInsertAsync batchFcmInsertAsync;

    @Before
    public void setUp() {
        fcmService = PowerMockito.spy(new FCMServiceImpl(restTemplate,
                fcmDeviceRepository,
                fcmMessagesRepository,
                fcmQueryImpl,
                batchFcmRepository,
                batchFcmInsertAsync));
        fcmServiceInt = Mockito.spy(FCMService.class);
    }

    @Test
    public void Testify() throws Exception {
        HashMap<String, String> a = new HashMap<>();
        FCMServiceImpl g = mock(FCMServiceImpl.class);
        a.put("error_message", "54321");
        AdminFcmResource fcmResource = AdminFcmResource.builder().adminId(123L).build();
        Mockito.doReturn(fcmResource).when(fcmService).addBulkFcmLog(new BulkFcmDataResource());
        PowerMockito.doReturn(a)
                .when(fcmService, "exchangeForTopic", anyString(), anyObject());
        fcmService.sendFcmByTopic(new BulkFcmDataResource());
    } }

Я использую powermock для макетирования некоторых частных и общедоступных методов

 @Override
public void sendFcmByTopic(BulkFcmDataResource adminFcmResource) throws RestServiceException {
    AdminFcmResource adminBulkFcmResource = addBulkFcmLog(adminFcmResource); // an overriden public method
    pushFCMToTopics(adminBulkFcmResource);// private method, calls the exchange method which i stubbed
}

FcmService - это интерфейс, а FcmServiceImpl - это реализация.Когда метод sendFcmByTopic вызывается из теста, выполняется настоящий метод addBulkFcmResource.Я попытался создать Mockito.spy для интерфейса FcmService и затем выполнить метод sendFcmByTopic, но при использовании mockito.spy interface.sendFcmByTopic не вызывается.

Насколько я понимаю, метод не долженбыть вызванным, если он не заглушен?

А также почему закрытый метод работает в powermockito, а не в публичном методе?

...