有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用注入java和spring boot的RestTemplate类进行单元测试

我正在使用一个包含注入的RestTemplate的类运行单元测试,只有当我运行测试时,RestTemplate才会在使用我正在使用的API后变为null

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

共 (1) 个答案

  1. # 1 楼答案

    您的测试似乎没有创建RestTemplate对象,因为没有处理注释@Mock的代码。创建模拟有不同的方法。例如,您可以在init方法中初始化mock

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

    有关更多选项,请查看Mockito's Javadoc