Commit ebf441ef13f35a57b0964c7d54b89b7737026922

Authored by YunaiV
1 parent 3070392e

infra:完善 job 的单元测试

yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceTest.java renamed to yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobLogServiceImplTest.java
1 1 package cn.iocoder.yudao.module.infra.service.job;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
5 4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
6 5 import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogExportReqVO;
7 6 import cn.iocoder.yudao.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
... ... @@ -12,18 +11,20 @@ import org.junit.jupiter.api.Test;
12 11 import org.springframework.context.annotation.Import;
13 12  
14 13 import javax.annotation.Resource;
15   -import java.util.ArrayList;
  14 +import java.time.LocalDateTime;
  15 +import java.util.Collection;
16 16 import java.util.List;
17 17  
18   -import static cn.hutool.core.util.RandomUtil.randomEle;
19 18 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
  19 +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
20 20 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
21 21 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
  22 +import static java.util.Collections.singleton;
22 23 import static org.junit.jupiter.api.Assertions.assertEquals;
23 24 import static org.junit.jupiter.api.Assertions.assertNotNull;
24 25  
25 26 @Import(JobLogServiceImpl.class)
26   -public class JobLogServiceTest extends BaseDbUnitTest {
  27 +public class JobLogServiceImplTest extends BaseDbUnitTest {
27 28  
28 29 @Resource
29 30 private JobLogServiceImpl jobLogService;
... ... @@ -31,66 +32,103 @@ public class JobLogServiceTest extends BaseDbUnitTest {
31 32 private JobLogMapper jobLogMapper;
32 33  
33 34 @Test
34   - public void testCreateJobLog_success() {
  35 + public void testCreateJobLog() {
35 36 // 准备参数
36   - JobLogDO reqVO = randomPojo(JobLogDO.class, o -> {
37   - o.setExecuteIndex(1);
38   - });
  37 + JobLogDO reqVO = randomPojo(JobLogDO.class, o -> o.setExecuteIndex(1));
  38 +
39 39 // 调用
40   - Long jobLogId = jobLogService.createJobLog(reqVO.getJobId(), reqVO.getBeginTime(), reqVO.getHandlerName(), reqVO.getHandlerParam(), reqVO.getExecuteIndex());
  40 + Long id = jobLogService.createJobLog(reqVO.getJobId(), reqVO.getBeginTime(),
  41 + reqVO.getHandlerName(), reqVO.getHandlerParam(), reqVO.getExecuteIndex());
41 42 // 断言
42   - assertNotNull(jobLogId);
  43 + assertNotNull(id);
43 44 // 校验记录的属性是否正确
44   - JobLogDO job = jobLogMapper.selectById(jobLogId);
  45 + JobLogDO job = jobLogMapper.selectById(id);
45 46 assertEquals(JobLogStatusEnum.RUNNING.getStatus(), job.getStatus());
46 47 }
47 48  
48 49 @Test
49 50 public void testUpdateJobLogResultAsync_success() {
50   - // 准备参数
51   - JobLogDO reqVO = randomPojo(JobLogDO.class, o -> {
  51 + // mock 数据
  52 + JobLogDO log = randomPojo(JobLogDO.class, o -> {
52 53 o.setExecuteIndex(1);
  54 + o.setStatus(JobLogStatusEnum.RUNNING.getStatus());
53 55 });
54   - JobLogDO log = JobLogDO.builder().jobId(reqVO.getJobId()).handlerName(reqVO.getHandlerName()).handlerParam(reqVO.getHandlerParam()).executeIndex(reqVO.getExecuteIndex())
55   - .beginTime(reqVO.getBeginTime()).status(JobLogStatusEnum.RUNNING.getStatus()).build();
56 56 jobLogMapper.insert(log);
57   - // 调用
58   - jobLogService.updateJobLogResultAsync(log.getId(), reqVO.getBeginTime(), reqVO.getDuration(), true,reqVO.getResult());
59   - // 校验记录的属性是否正确
60   - JobLogDO job = jobLogMapper.selectById(log.getId());
61   - assertEquals(JobLogStatusEnum.SUCCESS.getStatus(), job.getStatus());
  57 + // 准备参数
  58 + Long logId = log.getId();
  59 + LocalDateTime endTime = randomLocalDateTime();
  60 + Integer duration = randomInteger();
  61 + boolean success = true;
  62 + String result = randomString();
62 63  
63 64 // 调用
64   - jobLogService.updateJobLogResultAsync(log.getId(), reqVO.getBeginTime(), reqVO.getDuration(), false,reqVO.getResult());
  65 + jobLogService.updateJobLogResultAsync(logId, endTime, duration, success, result);
65 66 // 校验记录的属性是否正确
66   - JobLogDO job2 = jobLogMapper.selectById(log.getId());
67   - assertEquals(JobLogStatusEnum.FAILURE.getStatus(), job2.getStatus());
  67 + JobLogDO dbLog = jobLogMapper.selectById(log.getId());
  68 + assertEquals(endTime, dbLog.getEndTime());
  69 + assertEquals(duration, dbLog.getDuration());
  70 + assertEquals(JobLogStatusEnum.SUCCESS.getStatus(), dbLog.getStatus());
  71 + assertEquals(result, dbLog.getResult());
68 72 }
69 73  
70 74 @Test
71   - public void testGetJobLogListByIds_success() {
  75 + public void testUpdateJobLogResultAsync_failure() {
72 76 // mock 数据
73   - JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> {
  77 + JobLogDO log = randomPojo(JobLogDO.class, o -> {
74 78 o.setExecuteIndex(1);
75   - o.setStatus(randomEle(JobLogStatusEnum.values()).getStatus()); // 保证 status 的范围
  79 + o.setStatus(JobLogStatusEnum.RUNNING.getStatus());
76 80 });
77   - JobLogDO cloneJobLog = ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString()));
  81 + jobLogMapper.insert(log);
  82 + // 准备参数
  83 + Long logId = log.getId();
  84 + LocalDateTime endTime = randomLocalDateTime();
  85 + Integer duration = randomInteger();
  86 + boolean success = false;
  87 + String result = randomString();
  88 +
  89 + // 调用
  90 + jobLogService.updateJobLogResultAsync(logId, endTime, duration, success, result);
  91 + // 校验记录的属性是否正确
  92 + JobLogDO dbLog = jobLogMapper.selectById(log.getId());
  93 + assertEquals(endTime, dbLog.getEndTime());
  94 + assertEquals(duration, dbLog.getDuration());
  95 + assertEquals(JobLogStatusEnum.FAILURE.getStatus(), dbLog.getStatus());
  96 + assertEquals(result, dbLog.getResult());
  97 + }
  98 +
  99 + @Test
  100 + public void testGetJobLog() {
  101 + // mock 数据
  102 + JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> o.setExecuteIndex(1));
  103 + jobLogMapper.insert(dbJobLog);
  104 + // 准备参数
  105 + Long id = dbJobLog.getId();
  106 +
  107 + // 调用
  108 + JobLogDO jobLog = jobLogService.getJobLog(id);
  109 + // 断言
  110 + assertPojoEquals(dbJobLog, jobLog);
  111 + }
  112 +
  113 + @Test
  114 + public void testGetJobLogList() {
  115 + // mock 数据
  116 + JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> o.setExecuteIndex(1));
78 117 jobLogMapper.insert(dbJobLog);
79 118 // 测试 handlerName 不匹配
80   - jobLogMapper.insert(cloneJobLog);
  119 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> {}));
81 120 // 准备参数
82   - ArrayList ids = new ArrayList<>();
83   - ids.add(dbJobLog.getId());
84   - ids.add(cloneJobLog.getId());
  121 + Collection<Long> ids = singleton(dbJobLog.getId());
  122 +
85 123 // 调用
86 124 List<JobLogDO> list = jobLogService.getJobLogList(ids);
87 125 // 断言
88   - assertEquals(2, list.size());
  126 + assertEquals(1, list.size());
89 127 assertPojoEquals(dbJobLog, list.get(0));
90 128 }
91 129  
92 130 @Test
93   - public void testGetJobPage_success() {
  131 + public void testGetJobPage() {
94 132 // mock 数据
95 133 JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> {
96 134 o.setExecuteIndex(1);
... ... @@ -101,15 +139,15 @@ public class JobLogServiceTest extends BaseDbUnitTest {
101 139 });
102 140 jobLogMapper.insert(dbJobLog);
103 141 // 测试 jobId 不匹配
104   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId())));
  142 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId())));
105 143 // 测试 handlerName 不匹配
106   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())));
  144 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())));
107 145 // 测试 beginTime 不匹配
108   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7))));
  146 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7))));
109 147 // 测试 endTime 不匹配
110   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9))));
  148 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9))));
111 149 // 测试 status 不匹配
112   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus())));
  150 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus())));
113 151 // 准备参数
114 152 JobLogPageReqVO reqVo = new JobLogPageReqVO();
115 153 reqVo.setJobId(dbJobLog.getJobId());
... ... @@ -117,6 +155,7 @@ public class JobLogServiceTest extends BaseDbUnitTest {
117 155 reqVo.setBeginTime(dbJobLog.getBeginTime());
118 156 reqVo.setEndTime(dbJobLog.getEndTime());
119 157 reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
  158 +
120 159 // 调用
121 160 PageResult<JobLogDO> pageResult = jobLogService.getJobLogPage(reqVo);
122 161 // 断言
... ... @@ -126,7 +165,7 @@ public class JobLogServiceTest extends BaseDbUnitTest {
126 165 }
127 166  
128 167 @Test
129   - public void testGetJobListForExport_success() {
  168 + public void testGetJobList_export() {
130 169 // mock 数据
131 170 JobLogDO dbJobLog = randomPojo(JobLogDO.class, o -> {
132 171 o.setExecuteIndex(1);
... ... @@ -137,15 +176,15 @@ public class JobLogServiceTest extends BaseDbUnitTest {
137 176 });
138 177 jobLogMapper.insert(dbJobLog);
139 178 // 测试 jobId 不匹配
140   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId())));
  179 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setJobId(randomLongId())));
141 180 // 测试 handlerName 不匹配
142   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())));
  181 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setHandlerName(randomString())));
143 182 // 测试 beginTime 不匹配
144   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7))));
  183 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setBeginTime(buildTime(2021, 1, 7))));
145 184 // 测试 endTime 不匹配
146   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9))));
  185 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setEndTime(buildTime(2021, 1, 9))));
147 186 // 测试 status 不匹配
148   - jobLogMapper.insert(ObjectUtils.cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus())));
  187 + jobLogMapper.insert(cloneIgnoreId(dbJobLog, o -> o.setStatus(JobLogStatusEnum.FAILURE.getStatus())));
149 188 // 准备参数
150 189 JobLogExportReqVO reqVo = new JobLogExportReqVO();
151 190 reqVo.setJobId(dbJobLog.getJobId());
... ... @@ -153,6 +192,7 @@ public class JobLogServiceTest extends BaseDbUnitTest {
153 192 reqVo.setBeginTime(dbJobLog.getBeginTime());
154 193 reqVo.setEndTime(dbJobLog.getEndTime());
155 194 reqVo.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
  195 +
156 196 // 调用
157 197 List<JobLogDO> list = jobLogService.getJobLogList(reqVo);
158 198 // 断言
... ...
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceTest.java renamed to yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImplTest.java
1 1 package cn.iocoder.yudao.module.infra.service.job;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
5 4 import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager;
6 5 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
7 6 import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobCreateReqVO;
8 7 import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobExportReqVO;
9 8 import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO;
10 9 import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobUpdateReqVO;
11   -import cn.iocoder.yudao.module.infra.convert.job.JobConvert;
12 10 import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO;
13 11 import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper;
14 12 import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum;
... ... @@ -18,22 +16,23 @@ import org.springframework.boot.test.mock.mockito.MockBean;
18 16 import org.springframework.context.annotation.Import;
19 17  
20 18 import javax.annotation.Resource;
21   -import java.util.ArrayList;
  19 +import java.util.Collection;
22 20 import java.util.List;
23 21  
24 22 import static cn.hutool.core.util.RandomUtil.randomEle;
  23 +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
25 24 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
26 25 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
27 26 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
28 27 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
29 28 import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*;
  29 +import static java.util.Collections.singletonList;
30 30 import static org.junit.jupiter.api.Assertions.*;
31 31 import static org.mockito.ArgumentMatchers.eq;
32   -import static org.mockito.Mockito.times;
33 32 import static org.mockito.Mockito.verify;
34 33  
35 34 @Import(JobServiceImpl.class)
36   -public class JobServiceTest extends BaseDbUnitTest {
  35 +public class JobServiceImplTest extends BaseDbUnitTest {
37 36  
38 37 @Resource
39 38 private JobServiceImpl jobService;
... ... @@ -46,6 +45,7 @@ public class JobServiceTest extends BaseDbUnitTest {
46 45 public void testCreateJob_cronExpressionValid() {
47 46 // 准备参数。Cron 表达式为 String 类型,默认随机字符串。
48 47 JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class);
  48 +
49 49 // 调用,并断言异常
50 50 assertServiceException(() -> jobService.createJob(reqVO), JOB_CRON_EXPRESSION_VALID);
51 51 }
... ... @@ -54,6 +54,7 @@ public class JobServiceTest extends BaseDbUnitTest {
54 54 public void testCreateJob_jobHandlerExists() throws SchedulerException {
55 55 // 准备参数 指定 Cron 表达式
56 56 JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
  57 +
57 58 // 调用
58 59 jobService.createJob(reqVO);
59 60 // 调用,并断言异常
... ... @@ -64,6 +65,7 @@ public class JobServiceTest extends BaseDbUnitTest {
64 65 public void testCreateJob_success() throws SchedulerException {
65 66 // 准备参数 指定 Cron 表达式
66 67 JobCreateReqVO reqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
  68 +
67 69 // 调用
68 70 Long jobId = jobService.createJob(reqVO);
69 71 // 断言
... ... @@ -73,14 +75,15 @@ public class JobServiceTest extends BaseDbUnitTest {
73 75 assertPojoEquals(reqVO, job);
74 76 assertEquals(JobStatusEnum.NORMAL.getStatus(), job.getStatus());
75 77 // 校验调用
76   - verify(schedulerManager, times(1)).addJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()), eq(job.getCronExpression()),
77   - eq(reqVO.getRetryCount()), eq(reqVO.getRetryInterval()));
  78 + verify(schedulerManager).addJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()),
  79 + eq(job.getCronExpression()), eq(reqVO.getRetryCount()), eq(reqVO.getRetryInterval()));
78 80 }
79 81  
80 82 @Test
81 83 public void testUpdateJob_jobNotExists(){
82 84 // 准备参数
83 85 JobUpdateReqVO reqVO = randomPojo(JobUpdateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
  86 +
84 87 // 调用,并断言异常
85 88 assertServiceException(() -> jobService.updateJob(reqVO), JOB_NOT_EXISTS);
86 89 }
... ... @@ -88,150 +91,136 @@ public class JobServiceTest extends BaseDbUnitTest {
88 91 @Test
89 92 public void testUpdateJob_onlyNormalStatus(){
90 93 // mock 数据
91   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
92   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
93   - job.setStatus(JobStatusEnum.INIT.getStatus());
94   - fillJobMonitorTimeoutEmpty(job);
  94 + JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.INIT.getStatus()));
95 95 jobMapper.insert(job);
96 96 // 准备参数
97 97 JobUpdateReqVO updateReqVO = randomPojo(JobUpdateReqVO.class, o -> {
98 98 o.setId(job.getId());
99   - o.setName(createReqVO.getName());
100   - o.setCronExpression(createReqVO.getCronExpression());
  99 + o.setCronExpression("0 0/1 * * * ? *");
101 100 });
  101 +
102 102 // 调用,并断言异常
103   - assertServiceException(() -> jobService.updateJob(updateReqVO), JOB_UPDATE_ONLY_NORMAL_STATUS);
  103 + assertServiceException(() -> jobService.updateJob(updateReqVO),
  104 + JOB_UPDATE_ONLY_NORMAL_STATUS);
104 105 }
105 106  
106 107 @Test
107 108 public void testUpdateJob_success() throws SchedulerException {
108 109 // mock 数据
109   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
110   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
111   - job.setStatus(JobStatusEnum.NORMAL.getStatus());
112   - fillJobMonitorTimeoutEmpty(job);
  110 + JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus()));
113 111 jobMapper.insert(job);
114 112 // 准备参数
115 113 JobUpdateReqVO updateReqVO = randomPojo(JobUpdateReqVO.class, o -> {
116 114 o.setId(job.getId());
117   - o.setName(createReqVO.getName());
118   - o.setCronExpression(createReqVO.getCronExpression());
  115 + o.setCronExpression("0 0/1 * * * ? *");
119 116 });
  117 +
120 118 // 调用
121 119 jobService.updateJob(updateReqVO);
122 120 // 校验记录的属性是否正确
123 121 JobDO updateJob = jobMapper.selectById(updateReqVO.getId());
124 122 assertPojoEquals(updateReqVO, updateJob);
125 123 // 校验调用
126   - verify(schedulerManager, times(1)).updateJob(eq(job.getHandlerName()), eq(updateReqVO.getHandlerParam()), eq(updateReqVO.getCronExpression()),
127   - eq(updateReqVO.getRetryCount()), eq(updateReqVO.getRetryInterval()));
  124 + verify(schedulerManager).updateJob(eq(job.getHandlerName()), eq(updateReqVO.getHandlerParam()),
  125 + eq(updateReqVO.getCronExpression()), eq(updateReqVO.getRetryCount()), eq(updateReqVO.getRetryInterval()));
128 126 }
129 127  
130 128 @Test
131 129 public void testUpdateJobStatus_changeStatusInvalid() {
132 130 // 调用,并断言异常
133   - assertServiceException(() -> jobService.updateJobStatus(1L, JobStatusEnum.INIT.getStatus()), JOB_CHANGE_STATUS_INVALID);
  131 + assertServiceException(() -> jobService.updateJobStatus(1L, JobStatusEnum.INIT.getStatus()),
  132 + JOB_CHANGE_STATUS_INVALID);
134 133 }
135 134  
136 135 @Test
137 136 public void testUpdateJobStatus_changeStatusEquals() {
138 137 // mock 数据
139   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
140   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
141   - job.setStatus(JobStatusEnum.NORMAL.getStatus());
142   - fillJobMonitorTimeoutEmpty(job);
  138 + JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus()));
143 139 jobMapper.insert(job);
  140 +
144 141 // 调用,并断言异常
145   - assertServiceException(() -> jobService.updateJobStatus(job.getId(), job.getStatus()), JOB_CHANGE_STATUS_EQUALS);
  142 + assertServiceException(() -> jobService.updateJobStatus(job.getId(), job.getStatus()),
  143 + JOB_CHANGE_STATUS_EQUALS);
146 144 }
147 145  
148 146 @Test
149   - public void testUpdateJobStatus_NormalToStop_success() throws SchedulerException {
  147 + public void testUpdateJobStatus_stopSuccess() throws SchedulerException {
150 148 // mock 数据
151   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
152   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
153   - job.setStatus(JobStatusEnum.NORMAL.getStatus());
154   - fillJobMonitorTimeoutEmpty(job);
  149 + JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus()));
155 150 jobMapper.insert(job);
  151 +
156 152 // 调用
157 153 jobService.updateJobStatus(job.getId(), JobStatusEnum.STOP.getStatus());
158 154 // 校验记录的属性是否正确
159   - JobDO updateJob = jobMapper.selectById(job.getId());
160   - assertEquals(JobStatusEnum.STOP.getStatus(), updateJob.getStatus());
  155 + JobDO dbJob = jobMapper.selectById(job.getId());
  156 + assertEquals(JobStatusEnum.STOP.getStatus(), dbJob.getStatus());
161 157 // 校验调用
162   - verify(schedulerManager, times(1)).pauseJob(eq(job.getHandlerName()));
  158 + verify(schedulerManager).pauseJob(eq(job.getHandlerName()));
163 159 }
164 160  
165 161 @Test
166   - public void testUpdateJobStatus_StopToNormal_success() throws SchedulerException {
  162 + public void testUpdateJobStatus_normalSuccess() throws SchedulerException {
167 163 // mock 数据
168   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
169   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
170   - job.setStatus(JobStatusEnum.STOP.getStatus());
171   - fillJobMonitorTimeoutEmpty(job);
  164 + JobDO job = randomPojo(JobDO.class, o -> o.setStatus(JobStatusEnum.STOP.getStatus()));
172 165 jobMapper.insert(job);
  166 +
173 167 // 调用
174 168 jobService.updateJobStatus(job.getId(), JobStatusEnum.NORMAL.getStatus());
175 169 // 校验记录的属性是否正确
176   - JobDO updateJob = jobMapper.selectById(job.getId());
177   - assertEquals(JobStatusEnum.NORMAL.getStatus(), updateJob.getStatus());
  170 + JobDO dbJob = jobMapper.selectById(job.getId());
  171 + assertEquals(JobStatusEnum.NORMAL.getStatus(), dbJob.getStatus());
178 172 // 校验调用
179   - verify(schedulerManager, times(1)).resumeJob(eq(job.getHandlerName()));
  173 + verify(schedulerManager).resumeJob(eq(job.getHandlerName()));
180 174 }
181 175  
182 176 @Test
183 177 public void testTriggerJob_success() throws SchedulerException {
184 178 // mock 数据
185   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
186   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
187   - job.setStatus(JobStatusEnum.NORMAL.getStatus());
188   - fillJobMonitorTimeoutEmpty(job);
  179 + JobDO job = randomPojo(JobDO.class);
189 180 jobMapper.insert(job);
  181 +
190 182 // 调用
191 183 jobService.triggerJob(job.getId());
192 184 // 校验调用
193   - verify(schedulerManager, times(1)).triggerJob(eq(job.getId()), eq(job.getHandlerName()), eq(job.getHandlerParam()));
  185 + verify(schedulerManager).triggerJob(eq(job.getId()),
  186 + eq(job.getHandlerName()), eq(job.getHandlerParam()));
194 187 }
195 188  
196 189 @Test
197 190 public void testDeleteJob_success() throws SchedulerException {
198 191 // mock 数据
199   - JobCreateReqVO createReqVO = randomPojo(JobCreateReqVO.class, o -> o.setCronExpression("0 0/1 * * * ? *"));
200   - JobDO job = JobConvert.INSTANCE.convert(createReqVO);
201   - job.setStatus(JobStatusEnum.NORMAL.getStatus());
202   - fillJobMonitorTimeoutEmpty(job);
  192 + JobDO job = randomPojo(JobDO.class);
203 193 jobMapper.insert(job);
204   - // 调用 UPDATE inf_job SET deleted=1 WHERE id=? AND deleted=0
  194 +
  195 + // 调用
205 196 jobService.deleteJob(job.getId());
206   - // 校验数据不存在了 WHERE id=? AND deleted=0 查询为空正常
  197 + // 校验不存在
207 198 assertNull(jobMapper.selectById(job.getId()));
208 199 // 校验调用
209   - verify(schedulerManager, times(1)).deleteJob(eq(job.getHandlerName()));
  200 + verify(schedulerManager).deleteJob(eq(job.getHandlerName()));
210 201 }
211 202  
212 203 @Test
213   - public void testGetJobListByIds_success() {
  204 + public void testGetJobList() {
214 205 // mock 数据
215 206 JobDO dbJob = randomPojo(JobDO.class, o -> {
216 207 o.setStatus(randomEle(JobStatusEnum.values()).getStatus()); // 保证 status 的范围
217 208 });
218   - JobDO cloneJob = ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString()));
219 209 jobMapper.insert(dbJob);
220   - // 测试 handlerName 不匹配
221   - jobMapper.insert(cloneJob);
  210 + // 测试 id 不匹配
  211 + jobMapper.insert(cloneIgnoreId(dbJob, o -> {}));
  212 +
222 213 // 准备参数
223   - ArrayList<Long> ids = new ArrayList<>();
224   - ids.add(dbJob.getId());
225   - ids.add(cloneJob.getId());
  214 + Collection<Long> ids = singletonList(dbJob.getId());
226 215 // 调用
227 216 List<JobDO> list = jobService.getJobList(ids);
228 217 // 断言
229   - assertEquals(2, list.size());
  218 + assertEquals(1, list.size());
230 219 assertPojoEquals(dbJob, list.get(0));
231 220 }
232 221  
233 222 @Test
234   - public void testGetJobPage_success() {
  223 + public void testGetJobPage() {
235 224 // mock 数据
236 225 JobDO dbJob = randomPojo(JobDO.class, o -> {
237 226 o.setName("定时任务测试");
... ... @@ -240,16 +229,17 @@ public class JobServiceTest extends BaseDbUnitTest {
240 229 });
241 230 jobMapper.insert(dbJob);
242 231 // 测试 name 不匹配
243   - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setName("土豆")));
  232 + jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setName("土豆")));
244 233 // 测试 status 不匹配
245   - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())));
  234 + jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())));
246 235 // 测试 handlerName 不匹配
247   - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())));
  236 + jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())));
248 237 // 准备参数
249 238 JobPageReqVO reqVo = new JobPageReqVO();
250 239 reqVo.setName("定时");
251 240 reqVo.setStatus(JobStatusEnum.INIT.getStatus());
252 241 reqVo.setHandlerName("单元");
  242 +
253 243 // 调用
254 244 PageResult<JobDO> pageResult = jobService.getJobPage(reqVo);
255 245 // 断言
... ... @@ -259,7 +249,7 @@ public class JobServiceTest extends BaseDbUnitTest {
259 249 }
260 250  
261 251 @Test
262   - public void testGetJobListForExport_success() {
  252 + public void testGetJobList_export() {
263 253 // mock 数据
264 254 JobDO dbJob = randomPojo(JobDO.class, o -> {
265 255 o.setName("定时任务测试");
... ... @@ -268,16 +258,17 @@ public class JobServiceTest extends BaseDbUnitTest {
268 258 });
269 259 jobMapper.insert(dbJob);
270 260 // 测试 name 不匹配
271   - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setName("土豆")));
  261 + jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setName("土豆")));
272 262 // 测试 status 不匹配
273   - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())));
  263 + jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setStatus(JobStatusEnum.NORMAL.getStatus())));
274 264 // 测试 handlerName 不匹配
275   - jobMapper.insert(ObjectUtils.cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())));
  265 + jobMapper.insert(cloneIgnoreId(dbJob, o -> o.setHandlerName(randomString())));
276 266 // 准备参数
277 267 JobExportReqVO reqVo = new JobExportReqVO();
278 268 reqVo.setName("定时");
279 269 reqVo.setStatus(JobStatusEnum.INIT.getStatus());
280 270 reqVo.setHandlerName("单元");
  271 +
281 272 // 调用
282 273 List<JobDO> list = jobService.getJobList(reqVo);
283 274 // 断言
... ... @@ -285,10 +276,15 @@ public class JobServiceTest extends BaseDbUnitTest {
285 276 assertPojoEquals(dbJob, list.get(0));
286 277 }
287 278  
288   - private static void fillJobMonitorTimeoutEmpty(JobDO job) {
289   - if (job.getMonitorTimeout() == null) {
290   - job.setMonitorTimeout(0);
291   - }
  279 + @Test
  280 + public void testGetJob() {
  281 + // mock 数据
  282 + JobDO dbJob = randomPojo(JobDO.class);
  283 + jobMapper.insert(dbJob);
  284 + // 调用
  285 + JobDO job = jobService.getJob(dbJob.getId());
  286 + // 断言
  287 + assertPojoEquals(dbJob, job);
292 288 }
293 289  
294 290 }
... ...