@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, а не в публичном методе?