【问题标题】:Unit test using class with RestTemplate injected with java and spring boot使用注入 java 和 spring boot 的 RestTemplate 类进行单元测试
【发布时间】:2019-11-21 10:40:29
【问题描述】:

我正在使用注入了 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();
    }
}

【问题讨论】:

标签: java spring-boot junit mockito resttemplate


【解决方案1】:

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

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

更多选项请查看Mockito's Javadoc

【讨论】:

    【解决方案2】:

    坦率地说,我在findByCnpj() 中看不到任何需要自己进行单元测试的内容。我认为您不需要测试 RestTemplate.getForEntity() 方法,因为它已被 Spring 开发人员(和测试人员)多次测试。而且findByCnpj()里面也没有额外的逻辑

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 2016-12-07
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多