mockito и множественный HTTP в тесте Spring Boot - PullRequest
0 голосов
/ 24 апреля 2018

У меня большая проблема с проектом, над которым я работаю, и мне интересно, можете ли вы помочь мне.

Мне нужно выполнить несколько юнит-тестов с использованием mockito, все методы идутотличный!пока у вас не будет 2 вызовов http в одном и том же методе, и я не знаю, как их дифференцировать.

У меня есть следующие тесты:

  // -----------------------------------------------------------services
@InjectMocks
private SandboxAccountService accountService;

@InjectMocks
private SandboxBalancesService balancesService;

@InjectMocks
private SandboxMovementsService movementService;


@Mock
private RestTemplate restTemplate;

@Mock
private RestTemplate restTemplateMovimientos;


@Test
public void test_movementsServiceImpl() throws Exception {



    //LLAMADA A LISTA DE Account

    List<Account> accountList = new ArrayList<>();
    accountList.add(account);
    accountList.add(account2);

    ResponseEntity<List<Account>> list = new ResponseEntity<List<Account>>(accountList, HttpStatus.OK);


    // FIRST HTTP CALL
    when(restTemplate.exchange(anyString() , any(HttpMethod.class),
            any(HttpEntity.class), any(ParameterizedTypeReference.class))).thenReturn(list);

    //LLAMADA A LISTA DE MOVIMIENTOS

    listMovent.add(movement);
    listMovent.add(movementDos);

    ResponseEntity<List<Movement>> listaMovi = new ResponseEntity<List<Movement>>(listMovent, HttpStatus.OK);

   // Second HTTP CALL
    when(restTemplateMovimientos.exchange(anyString() , any(HttpMethod.class),
            any(HttpEntity.class), any(ParameterizedTypeReference.class))).thenReturn(listaMovi);






try {
    AccountsMovementsResponse accountsMovementsResponse = movementService.getMovements(accountsMovementsRequest,
            AUTORIZATHION_TOKEN, language);
} catch (Exception e) {

}

}

Когда отладка делает спискидля меня правильно и все хорошо, но когда он переключается на службу

    //// This its a primary http ( Account)
    ResponseEntity<List<Account>> exchange = restTemplate.exchange(sandboxAccountURL + userId, HttpMethod.GET,entity,
            new ParameterizedTypeReference<List<Account>>() {
            });

    // This list its Account CORRECT
    List<Account> lista=exchange.getBody();


   // code.....

    // This its a second http ( movement )
    ResponseEntity<List<Movement>> movementList = restTemplate.exchange(GenerateUrl, HttpMethod.GET,entity,
                            new ParameterizedTypeReference<List<Movement>>() {
                            });
                 // This list should be moves, but it's a list of accounts.
                 List<Movement> listMovement= movementList.getBody();

Моя большая проблема заключается в том, что вместо двух разных списков у меня есть два из них, поэтому тест не может быть продолжен.

Если я попробую код, все работает без проблем и заставляет его работать, у меня проблема в том, что в момент тестирования он клонирует списки.

Я не знаю, есть ли способзаставлять насмешливое «когда» может отличать их, потому что это заставляет меня понять, что, когда я делаю, это занимает первое место.

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 25 апреля 2018

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

when(restTemplate.exchange(anyString(), any(HttpMethod.class),
            any(HttpEntity.class), any(ParameterizedTypeReference.class))).thenReturn(list).thenReturn(listaMovi);
...