Mockito when (). ThenReturn вызывает фактический метод - PullRequest
0 голосов
/ 06 мая 2020

Это метод, который я пытаюсь протестировать -

@Service
public class ShareableLinkService {

    private PaymentService paymentService;

    @Autowired
    public ShareableLinkService(PaymentService paymentService) {  
        this.paymentService = paymentService;
    }

    public ResponseEntity<ResponseDTO> cancelSmartPay(Long id, String merchantRefId) {
        ..
        responseDTO = paymentService.processCancelPayment(id, merchantRefId);
        ..

    }

}

И следующий вызываемый метод -

@Service
public class PaymentService {
@Transactional
    public ResponseDTO processCancelPayment(Long param, String merchantRefId) {
    TransactionRequest transactionRequest = transactionRequestService.findByMerchantIdAndMerchantRefId(param, merchantRefId);

..
}

Ниже приведен мой тестовый код -

@RunWith(MockitoJUnitRunner.class)
public class SmartPayMockitoServiceTest {

    @Mock
    private PaymentService paymentServiceNew;

    when(paymentServiceNew.processCancelPayment(id,merchantRefId)).thenReturn(new ResponseDTO(Constants.API_RESPONSE_SUCCESS, "transaction cancelled"));

    when(paymentServiceNew.processCancelPayment(id,merchantRefId)).thenReturn(new ResponseDTO(Constants.API_RESPONSE_SUCCESS, "transaction cancelled"));
    assertEquals("1", shareableLinkService.cancelSmartPay(id, merchantRefId).getBody().getStatus().toString());

    assertEquals("1", shareableLinkService.cancelSmartPay(payoutMerchantId, merchantRefId).getBody().getStatus().toString());

Когда я запускаю вызов cancelSmartPay () в последнем операторе, он фактически вызывает метод processCancelPayment ().

Я уже проверил Mockito when (). ThenReturn вызывает метод без необходимости

Обновление

Я сделал это в соответствии с ответом @Jalil -

@Mock
private PaymentService paymentService;


@InjectMocks
private ShareableLinkService shareableLinkService;

Тем не менее, фактические методы вызываются. Кроме того, когда я нахожусь в режиме отладки, я получаю java.lang.reflect.InvocationTargetException.

1 Ответ

0 голосов
/ 07 мая 2020

не могли бы вы рассказать, как вы создаете экземпляр объекта shareableLinkService.

Это должно быть примерно так

@RunWith(MockitoJUnitRunner.class)
public class SmartPayMockitoServiceTest {

    @Mock
    private PaymentService paymentServiceNew;

    @InjectMocks
    private ShareableLinkService shareableLinkService;

    // the rest of the code

}

Ваш тест должен находиться внутри метода, помеченного @ Test

@Test
void testMethod(){

    when(paymentServiceNew.processCancelPayment(id,merchantRefId)).thenReturn(new ResponseDTO(Constants.API_RESPONSE_SUCCESS, "transaction cancelled"));

    when(paymentServiceNew.processCancelPayment(id,merchantRefId)).thenReturn(new ResponseDTO(Constants.API_RESPONSE_SUCCESS, "transaction cancelled"));
    assertEquals("1", shareableLinkService.cancelSmartPay(id, merchantRefId).getBody().getStatus().toString());

    assertEquals("1", shareableLinkService.cancelSmartPay(payoutMerchantId, merchantRefId).getBody().getStatus().toString());

}
...