模拟 ApexAsynJob 的测试方法

Testing methods mocking ApexAsynJob

我有以下问题。这是我需要测试的目标顶点 class:

class TargetClass {
    public static Id BatchId {get; set;} 
    public void methodOne() {
        //adding an ApexAsyncJob in database and assign its ID ot BatchId
    }

    @Remote
    public static String methodTwo(string batchId) {
        //gets the ApexAsynJob inserted in previous method from database and         //do some operations with it 
    }
}

这是我的测试class

@isTest
public TargetClassTest() {
    static testmethod void test() {
        test.startTest();
        TargetClass tgtClass = new TargetClass();
        tgtClass.methodOne();
        TargetClass.methodTwo(TargetClass.BatchId);
    }
}

当 methodOne 完成并调用 methdTwo 时,我们分配了 BatchId 属性 但 AsynApexJob 不在数据库中,因此 methodtwo 抛出异常。我该如何解决它并完成我的测试。 我有以下想法 1. 运行 methodTwo 只要 AsynApexJob 在数据库中。我怎样才能做到这一点?当我们达到查询限制时,无限循环检查数据库不起作用。 2. 模拟 AsyncApexJob。我不一定需要在 methodOne 中插入 AsynApexJob。任何一个都行。我不知道该怎么做。当我尝试在数据库中插入一个时,我收到一条错误消息,指出 INSERT 在 AsynApexJob 中不可用。 如果有人能帮助我就好了。 谢谢!

您可以查询作业,所以在您安排作业后,您可以执行此操作,然后断言该作业实际已安排..

List<AsyncApexJob> jobInfo = [SELECT Status,NumberOfErrors FROM AsyncApexJob];
System.assertEquals(jobInfo.size(), 1);