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

Mockito测试中ProcessFileService的save方法未被代码覆盖求助

问题原因及修正方案

你的测试没覆盖到save方法的核心原因是你Mock了ProcessFileService本身。Mockito创建的Mock对象不会执行真实方法逻辑,你用doNothing() stub了save方法,调用时只是走了Mock的空实现,根本没进到你写的save方法里,自然没有代码覆盖。

正确的做法是实例化真实的ProcessFileService对象,把你已经Mock好的两个Repository注入进去,这样调用save方法时才会执行真实的业务逻辑,同时验证Repository的方法是否被正确调用。

修正后的测试类代码

@ExtendWith(MockitoExtension.class)
public class ProcessFileServiceTest {

    @Mock
    private ProcessFileRepository processFileRepository;
    @Mock
    private ProcessRunRepository processRunRepository;

    // 用@InjectMocks让Mockito自动把Mock的Repository注入到真实的Service实例中
    @InjectMocks
    private ProcessFileService processFileService;

    @Test
    void processSave() {
        // 1. 准备测试数据
        ProcessRun processRun = new ProcessRun();
        processRun.setEndDateTime("30/08/2022");
        processRun.setNumFilesFailed(1L);
        processRun.setNumFilesProcessed(1L);
        processRun.setNumFilesTransferred(1L);
        processRun.setStartDateTime("30/08/2022");

        ProcessFile processFile = new ProcessFile();
        processFile.setCurrentRetryAttempt(1);
        processFile.setFileName("file.txt");
        processFile.setSuccessfulYN(true);
        processFile.setTransferDateTime("30/08/2022");

        List<ProcessFile> processFiles = new ArrayList<>();
        processFiles.add(processFile);

        // 2. 调用真实的save方法
        processFileService.save(processRun, processFiles);

        // 3. 验证Repository的方法是否被正确调用
        verify(processRunRepository, times(1)).save(processRun);
        verify(processFile).setProcessRun(processRun);
        verify(processFileRepository, times(1)).save(processFile);
    }
}

关键说明

  • @InjectMocks:Mockito会自动将标注了@Mock的Repository注入到ProcessFileService实例中,替代原来的@Autowired依赖。
  • 调用真实Service的save方法:这样才会执行你编写的业务逻辑,包括循环设置ProcessRun关联关系、调用两个Repository的save方法。
  • 验证Repository的方法:测试Service的核心是验证它是否正确调用了依赖的Repository方法,而不是验证Service自身方法的调用次数(这没有实际测试意义)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:24:13