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