簡體   English   中英

使用帶有注入Java和Spring Boot的RestTemplate的類進行單元測試

[英]Unit test using class with RestTemplate injected with java and spring boot

我正在使用具有注入的RestTemplate的類運行單元測試,並且只有當我運行測試時,使用我使用的API后RestTemplate才會為空。

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();
    }
}

似乎您的測試未創建RestTemplate對象,因為沒有代碼可處理注釋@Mock 有多種創建模擬的方法。 例如,您可以在init方法中初始化模擬。

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

有關更多選項,請查看Mockito的Javadoc

坦白說,我在findByCnpj()不到任何需要自己進行單元測試的內容。 我認為您不需要測試RestTemplate.getForEntity()方法,因為它已經由Spring開發人員(和測試人員)測試了很多次。 而且findByCnpj()沒有其他邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM