java - Mockito 不是 stub 该方法,而是调用该方法

标签 java spring-boot junit mockito

我基本上是使用 Mockito 框架的新手。

@Test
@SuppressWarnings("rawtypes")
public void testGetCaseDetailResponse() throws Exception {

    HashMap requestM = new HashMap<String, String>();
    requestM.put("transactionId", "******");
    requestM.put("clientSystem", "URW");
    requestM.put("loginId", "JUSTINN");


Mockito.when(caseDetailsService.getSAPCaseDetail(Mockito.any(), requestM))
            .thenReturn(sapCaseDetailResponse);
}

以下代码部分理想情况下应 stub 方法 caseDetailsS​​ervice.getSAPCaseDetail 正在调用该方法。我在 Debug模式下运行并验证了情况确实如此。

Mockito.when(caseDetailsService.getSAPCaseDetail(Mockito.any(), requestM))
            .thenReturn(sapCaseDetailResponse);

有关初始化部分的更多信息

@RunWith(MockitoJUnitRunner.class)
public class CaseDetailsServiceTest {
@Mock
RestTemplate restTemplate;

@Mock
AuthUtil authUtil;

@Mock
HttpHeaders httpHeaders;

@Mock
private HttpServletRequest httpRequest;

@Mock
SapServiceClient sapServiceClient;

@Mock
DateConvertUtils dateConvertUtils;

@Mock
CaseConverter caseConverter;

@InjectMocks
CaseDetailsService caseDetailsService;

我可能会遗漏一些东西,任何帮助将不胜感激,提前致谢!

最佳答案

这里:

Mockito.when(caseDetailsService

但是:

@InjectMocks
CaseDetailsService caseDetailsService;

@InjectMocks 的要点是将之前创建的模拟对象插入到正在测试的生产类的实例中。

换句话说:caseDetailsS​​ervice 不是模拟。因此,您不能使用 when(caseDetailsS​​ervice...)

你看,when() 用于指定 Mockito 创建的模拟对象的行为。您不能将 when() 应用于非模拟的内容。

因此,真正的答案是:退后一步,阅读有关 Mockito 的优秀教程,以及它的注释的真正含义。模拟框架很复杂,你无法通过“反复试验”来学习它们!

一个很好的起点: vogella 上的教程.

关于java - Mockito 不是 stub 该方法,而是调用该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771931/

相关文章:

java - 单元测试中的模拟域实体

java - 如何使用模拟对象替换内部代码部分中的原始对象?

javax.mail.AuthenticationFailedException : 535 5. 0.0 身份验证失败

javascript - AJAX调用SpringBoot Controller 导致CORS错误

java - 在 switch 语句中测试(junit)默认情况?

mysql - 如何在 Spring JpaRepository 中使用自定义 DTO 进行可分页响应

mongodb - 什么是 spring-boot 和 mongoDB 的管理 UI,提供像 django-admin 一样的 CRUD 操作?

java - 使用此自定义格式解析 DateTime

java - Android webview chromium 异常 - ContextResult::kFatalFailure: 支持的制服或变量太少

java - 当我输入 "done"时我的程序不会停止