You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中测试ValService时如何Mock AppService的sendToAPI方法?

如何Mock外部依赖测试ValService

要测试ValService的validate方法,核心是把依赖的AppServiceMock掉,避免调用真实的外部API。下面用Java常用的Mockito框架来实现:

步骤1:确保测试依赖到位

在项目的测试依赖中加入Mockito相关包(比如mockito-core和适配JUnit 5的mockito-junit-jupiter)。

步骤2:搭建测试类结构

用Mockito的注解快速配置Mock对象和测试目标类:

  • @Mock:创建AppService的Mock实例,替代真实的服务实现
  • @InjectMocks:自动把Mock的AppService注入到ValService实例中,避免手动写注入逻辑

步骤3:编写测试用例

以测试正常场景为例,代码如下:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class ValServiceTest {

    @Mock
    private AppService appService;

    @InjectMocks
    private ValService valService;

    @Test
    void validate_shouldProcessMockedCharCorrectly() {
        // 准备测试参数
        List<String> testStrList = List.of("foo", "bar");
        String testId = "test-001";
        Character mockReturnChar = 'X';

        // 指定Mock方法的行为:当调用sendToAPI传入对应参数时,返回预设字符
        when(appService.sendToAPI(testStrList, testId)).thenReturn(mockReturnChar);

        // 调用要测试的validate方法
        String validateResult = valService.validate(testStrList, testId);

        // 断言结果符合预期(这里假设validate方法会返回包含该字符的验证结果)
        assertEquals("Validation passed: X", validateResult);

        // 可选验证:确认sendToAPI确实被调用了一次,参数正确
        verify(appService, times(1)).sendToAPI(testStrList, testId);
    }
}

额外场景处理

  • 模拟异常:如果需要测试sendToAPI抛出异常时ValService的处理逻辑,可以用when(appService.sendToAPI(anyList(), anyString())).thenThrow(new RuntimeException("API error"));
  • 宽松参数匹配:如果不需要严格匹配参数,可用anyList()、anyString()等匹配器,比如when(appService.sendToAPI(anyList(), anyString())).thenReturn('Y');
  • 依赖注入要求:确保ValService中的AppService是通过构造器注入、Setter注入等方式引入的,这样Mockito才能顺利替换为Mock对象,避免硬编码实例化。

内容的提问来源于stack exchange,提问作者titania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:13:29