2016-10-21 6 views
0

У меня есть следующая проблема. Вот моя цель апекс класс Ineed испытанию:Методы тестирования mocking 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 
    } 
} 

А вот мой класс тестирование

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

Когда метадона сделано и methdTwo называется, мы имеем свойство BatchId назначен, но AsynApexJob является а не в базе данных, поэтому methodtwo выбрасывает исключение. Как я могу это решить и закончить тесты. У меня есть следующие идеи: 1. Запустите метод дважды, когда AsynApexJob находится в базе данных. Как я могу это сделать? Бесконечный цикл проверки базы данных не работает, поскольку мы попадаем в предел запросов. 2. Издевается над AsyncApexJob. Мне не обязательно нужен AsynApexJob, вставленный в методOne. Любой будет работать. Я не знаю, как это сделать. Когда я попытался вставить его в базу данных, у меня появилось сообщение об ошибке, которое INSERT не доступно в AsynApexJob. Было бы хорошо, если кто-то может мне помочь. Спасибо!

ответ

0

Вы можете запрашивая из заданий, поэтому после того, как вы планировать работу, которую вы можете сделать это, а затем утверждать, что работа была на самом деле планируется ..

List<AsyncApexJob> jobInfo = [SELECT Status,NumberOfErrors FROM AsyncApexJob]; 
System.assertEquals(jobInfo.size(), 1); 
Смежные вопросы