2016-10-21 3 views
0

Ich habe das folgende Problem. Hier ist mein Ziel Apex-Klasse, die Ineed zu testen:Testmethoden spotten ApexAsynJob

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 
    } 
} 

Und hier ist meine Testklasse

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

Wenn Methodon getan wird und methdTwo genannt wird, haben wir die BatchID Eigenschaft zugewiesen, aber die AsynApexJob ist noch nicht in der Datenbank, so wirft methodzwei eine Ausnahme auf. Wie kann ich es lösen und meine Tests beenden? Ich habe die folgenden Ideen 1. run methodTwo immer wenn der AsynApexJob in der Datenbank ist. Wie kann ich das machen? Eine Endlosschleife, die die Datenbank überprüft, funktioniert nicht, da wir die Grenze der Abfragen erreicht haben. 2. Mocking ein AsyncApexJob. Ich brauche nicht notwendigerweise den AsynApexJob in methodOne eingefügt. Jeder würde funktionieren. Ich weiß nicht, wie ich es machen soll. Als ich versuchte, einen in die Datenbank einzufügen, bekam ich die Fehlermeldung, dass INSERT in AsynApexJob nicht verfügbar ist. Es wäre in Ordnung, wenn mir jemand helfen könnte. Danke!

Antwort

0

Sie können die Jobs Abfrage aus, so, nachdem Sie den Auftrag so planen, dies zu tun und dann behaupten, dass der Job tatsächlich geplant war ..

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