我的调度要求很小 配置每月间隔的批处理作业。
说,如果作业开始时间是2017年1月5日,间隔是1个月,它将在以下日期运行作业。
1月5日,2月5日,3月5日,....
当应用程序停机一段时间并且当它出现时,我正在计算下一个运行时间,如下所示。
每月工作,
(ChronoUnit.MONTHS.between(jobStTime, currentTime) + 1;
它将返回到目前为止的运行次数,
对于前,
(ChronoUnit.MONTHS.between("Jan 5th 2017", "Jan 20th 2018") + 1;
将返回13。
现在,下一次运行计算如下。
jobStTime.plusMonths(13);
对于前,
" 2017年1月5日" .plusMonths(13)将于2018年2月5日返回。
希望,逻辑上没有任何缺陷。
现在,问题在于单元测试。
我有一个单元测试如下测试每月的工作。
日期jobDate = currentDate.minusMonths(2); 日期currentDate = currentDate.minusHour(1);
说,
测试案例1: -
单元测试正在" 2018年1月20日上午10点 - >运行的currentdate。
工作日期为" 2017年11月20日上午10点" currentDate for testing将于2018年1月20日上午9点开始。
所以,现在跳过计算将是,
(ChronoUnit.MONTHS.between(" 2017年11月20日上午10点"," 2018年1月20日) 上午9点")+ 1; - > 2
这很好,下一次运行将是,
" 2017年11月20日10 AM" .plusMonths(2) - > " 2017年1月20日10 AM"
测试案例2: - 这就是问题所在。
单元测试在" 2018年1月31日上午10点 - >运行的currentdate。
工作日期为" 2017年11月30日上午10点" currentDate for testing将于2018年1月31日上午9点开始。
所以,现在跳过计算将是,
(ChronoUnit.MONTHS.between(" 2017年11月30日上午10点"," 2018年1月31日) 上午9点")+ 1; - > 3
下一次运行将是,
" 2017年11月30日10 AM" .plusMonths(3) - > " 2017年3月30日上午10点"
因此,单元测试在本月31日运行时失败。
除了在单元测试代码中处理第31个问题之外,还有其他解决方案吗?
由于