gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:42:02 25 4
gpt4 key购买 nike

我正在使用一个已注入(inject) 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();
}
}

最佳答案

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

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

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

关于java - 使用注入(inject) java 和 spring boot 的 RestTemplate 类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56993808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com