课程章节介绍
同学们,今天我们来聊一个特别实用的知识点——怎么测试可调度的作业,也就是 Schedulable 的 Apex 类。你要是在实际项目里写定时任务,那测试环节绝对不能马虎。
简单来说,测试的思路是这样的:你先把要测的调度作业提交上去,但这个提交一定要写在 `Test.startTest()` 和 `Test.stopTest()` 之间。为什么这么做呢?因为当代码执行到 `Test.stopTest()` 的那一刻,系统会一次性、同步地把之前你提交的所有异步任务全部跑完。这就给了我们一个非常方便的控制窗口。等执行完之后,你再去查询这个作业应该创建的那些数据,看看结果是不是符合预期,这样验证就完成了。
接下来要特别注意的,就是作业链,也就是所谓的 Chaining。如果你的调度作业在执行逻辑里,又提交了另外一个可调度作业,这就形成了一条链。但有一点要记牢:,每个父作业只能提交一个子作业,,不能在一个作业里一下子丢出一堆孩子。测试这种链式作业时,你要想清楚这个链条会有多深,可能会走到堆栈的极限,同时还要警惕调节器限制,比如总的 CPU 时间、查询次数等等。把链条设计得短一点,测试会更稳定。
还有一个细节:如果你的调度作业里面需要对外部服务发起标注呼叫,那这个类就一定要实现 `Database.AllowsCallouts` 接口,否则运行时会直接报错。实现这个接口就等同于告诉平台:“我这个作业会打出去打电话哦,请允许”。
最后,在测试链式调度作业的时候,建议你提前估算一下整个链执行下来会消耗多少资源,尽量控制堆栈深度,不要让测试因为达到调节器上限而失败。
好了,这些就是测试可调度作业的核心要点:用 `startTest` 和 `stopTest` 控制执行时机,查询数据去验证;链式作业只提交一个子任务,留意堆栈和调节器;需要标注时别忘了实现接口。把这些掌握了,写测试就很顺手了。
关键词
Apex
Salesforce
Developer Guide