Модульный тест с использованием класса с RestTemplate, внедренного с Java и весенней загрузкой - PullRequest
0 голосов
/ 11 июля 2019

Я запускаю модульное тестирование с классом, в котором есть внедренный RestTemplate, и только когда я запускаю тесты, RestTemplate получает значение NULL после использования API, которое я использую.

class ReceitaWsIntegrationImpl implements ReceitaWsIntegration {

  private static final String URL_RECEITA_WS_CNPJ
    = "https://www.receitaws.com.br/v1/cnpj";

  private final RestTemplate restTemplate;

  @Override
  public void findByCnpj(String cnpj) {
    ResponseEntity<CnpjResource> forEntity = restTemplate.getForEntity(
      URL_RECEITA_WS_CNPJ.concat("/").concat(cnpj), CnpjResource.class);
  }
}

Тестовый класс:

public class ReceitaWsIntegrationImplTest extends TestSupport {

private static final String CNPJ = "27865757000102";
private static final String URL_RECEITA_WS_CNPJ = "https://www.receitaws.com.br/v1/cnpj/";
@Mock
private RestTemplate restTemplate;
private ReceitaWsIntegration receitaWsIntegration;

    @Override
    public void init() {
        receitaWsIntegration = new ReceitaWsIntegrationImpl(restTemplate);
    }

    @Test
    public void should_find_company_by_cnpj() {
        receitaWsIntegration.findByCnpj(CNPJ);

        InOrder inOrder = inOrder(restTemplate);

        inOrder.verify(restTemplate, times(1))
            .getForEntity(URL_RECEITA_WS_CNPJ.concat(CNPJ), CnpjResource.class);
        inOrder.verifyNoMoreInteractions();
    }
}

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Похоже, ваш тест не создает объект RestTemplate, потому что нет кода, который обрабатывает аннотацию @Mock. Существуют разные способы создания макета. Например. Вы можете инициировать макет в методе init.

@Override
public void init() {
    MockitoAnnotations.initMocks(this);
    receitaWsIntegration = new ReceitaWsIntegrationImpl(restTemplate);
}

Дополнительные параметры см. В Javadoc Mockito's .

0 голосов
/ 11 июля 2019

Честно говоря, я не вижу ничего в findByCnpj(), требующего собственного юнит-теста.Я не думаю, что вам нужно тестировать метод RestTemplate.getForEntity(), так как он много раз тестировался разработчиками (и тестировщиками) Spring.И нет никакой дополнительной логики в findByCnpj()

...