[英]Mockito keeps calling the real method and not mock it
我正在尝试创建一个测试,其中我必须在要测试的类中模拟一个方法。 但是它一直在调用真正的方法,但是我想模拟它。
我要嘲笑的方法是
extractSecretValue(字符串路径)
我知道这不是在嘲笑该方法,因为有一个“ println”,它正在打印。
我究竟做错了什么?
我正在使用JUnit 5
我要测试的课程:
@Configuration
public class RestTemplateConfig {
@Value("${******}")
private String keystore;
@Value("${******}")
private String identificador;
@Value("${******}")
private String token;
@Bean
public RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {
SSLContext context = null;
context = SSLContext.getInstance("TLSv1.2");
context.init(null, null, null);
List<Header> headers = new ArrayList<>();
headers.add(new BasicHeader("Authorization", "Bearer " + extractSecretValue(token)));
CloseableHttpClient httpClient = HttpClientBuilder.create().setSSLContext(context).setDefaultHeaders(headers)
.build();
HttpComponentsClientHttpRequestFactory hcchr = new HttpComponentsClientHttpRequestFactory(httpClient);
hcchr.setConnectionRequestTimeout(10000);
return new RestTemplate(hcchr);
}
public String extractSecretValue(String path) {
System.out.println("Test1");
Path secretPath = Paths.get(path);
String value = "";
try (Stream<String> lines = Files.lines(secretPath)) {
value = lines.collect(Collectors.joining());
} catch (IOException ignored) {
throw new ApplicationException(ignored);
}
return value.isEmpty() ? path : value;
}
}
测试类:
@ExtendWith(MockitoExtension.class)
public class RestTemplateConfigTest {
@Test
public void return_restTemplateConfig() {
RestTemplateConfig restTemplateConfig = new RestTemplateConfig();
RestTemplateConfig restTemplateMock;
RestTemplate restTemplate;
restTemplateMock = Mockito.spy(restTemplateConfig);
try {
when(restTemplateMock.extractSecretValue(anyString())).thenReturn("423424");
restTemplate = restTemplateMock.restTemplate();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
throw new ApplicationException(e);
}
}
}
我也已经尝试过了:
doReturn("2332").when(restTemplateMock).extractSecretValue(anyString());
如果使用when(...).thenReturn(...)
,则仍将调用真实方法
(来自Mockito,与您的测试无关) ,
但是当您使用doReturn(...).when(...)
表示法doReturn(...).when(...)
不应发生这种情况。
测试中的问题是token
为null,而您的anyString()
不匹配,因为它仅与非null字符串匹配。
改用any()
,它匹配任何内容 ,包括null 。
将其与doReturn(...).when(...)
,您的测试应会成功。
如果您不希望调用实际方法,则应使用Mockito.mock()而不是Mockito.spy()。
您应该更新测试类以使用:
restTemplateMock = Mockito.mock(RestTemplateConfig.class);
您尚未嘲笑RestTemplateConfig,已实例化了它。
您想要的是:
restTemplateMock = Mockito.spy(new RestTemplateConfig());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.