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

如何为Java类runJob方法编写JUnit测试并自定义employee参数值?

JUnit测试中为runJob()方法的employee参数设置自定义值的实现方案

要给runJob()里的employee参数设置自定义值,核心是mock掉依赖的employeeService——因为employee的值是通过employeeService.getEmployeeNum()获取的。下面用Mockito + JUnit 5给出具体实现:

核心思路

  • 用Mockito框架模拟employeeService的行为,强制它返回你需要的自定义employee数值
  • 按需模拟performanceService的返回结果,覆盖业务中的成功/失败分支
  • 调用目标方法后,验证ScheduleJob的状态是否符合预期

具体代码实现

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 static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

@ExtendWith(MockitoExtension.class)
class DailyJobTest {

    // 注入被测试类实例
    @InjectMocks
    private DailyJob dailyJob;

    // Mock依赖的服务对象
    @Mock
    private EmployeeService employeeService;
    @Mock
    private PerformanceService performanceService;

    @Test
    void runJob_EmployeeHasPerformance_SetsSuccessRecord() {
        // 1. 设置自定义的employee数值
        int customEmployeeId = 1001;
        when(employeeService.getEmployeeNum()).thenReturn(customEmployeeId);

        // 2. Mock该employee的绩效数据(非空,触发success分支)
        JobPerformance mockPerformance = mock(JobPerformance.class);
        when(mockPerformance.size()).thenReturn(2);
        when(performanceService.searchJobPerformance(customEmployeeId)).thenReturn(mockPerformance);

        // 3. 准备测试用的ScheduleJob实例
        ScheduleJob testJob = new ScheduleJob();

        // 4. 调用目标方法
        dailyJob.runJob(testJob);

        // 5. 验证结果
        assertEquals("success", testJob.getRecord());
    }

    @Test
    void runJob_EmployeeNoPerformance_SetsFailedRecord() {
        // 1. 设置自定义的employee数值
        int customEmployeeId = 1002;
        when(employeeService.getEmployeeNum()).thenReturn(customEmployeeId);

        // 2. Mock该employee的绩效数据(空,触发failed分支)
        JobPerformance mockPerformance = mock(JobPerformance.class);
        when(mockPerformance.size()).thenReturn(0);
        when(performanceService.searchJobPerformance(customEmployeeId)).thenReturn(mockPerformance);

        // 3. 准备测试用的ScheduleJob实例
        ScheduleJob testJob = new ScheduleJob();

        // 4. 调用目标方法
        dailyJob.runJob(testJob);

        // 5. 验证结果
        assertEquals("failed", testJob.getRecord());
    }
}

补充说明

  • 若项目使用JUnit 4,只需把@ExtendWith(MockitoExtension.class)替换为@RunWith(MockitoJUnitRunner.class)
  • 推荐用构造函数注入employeeService和performanceService,@InjectMocks会自动完成依赖装配;如果是字段注入,需保证字段为包私有或public
  • 异常场景测试可通过when().thenThrow()模拟服务抛出异常,验证catch块的处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:45:13