[英]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.