написать тестовый класс для класса Apex - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в apex, мне интересно написать тестовый класс для следующего контроллера, но я не уверен, с чего начать.Вот мой код класса Apex.

public class tree {
   public Account acct{get;set;}  
    //private final Account acct;
    public ApexPages.StandardController stdController {get;set;}
    public tree(ApexPages.StandardController stdController) {
        stdController.addFields(new String[]{'Id','Tete_de_groupe__c'});
        this.acct = (Account)stdController.getRecord();
       // this.stdController = stdController;
       }
    public List<Account> listOfAccount(){
        List<Account> acctList;
        if (acct.Tete_de_groupe__c == null){
        acctList = [SELECT Name,Parent.Name,id,Code_NAF__c ,Industry ,RecordType.Name,Adresse_Agence__c, Tete_de_groupe__c,Statut__c 
                                 FROM Account
                                 where id = :this.acct.id or Tete_de_groupe__c = :this.acct.id ];}
        else {
        acctList = [Select Name,Parent.Name,id,Tete_de_groupe__c,Statut__c
                          from Account
                          where id = :this.acct.Tete_de_groupe__c or Tete_de_groupe__c = :this.acct.Tete_de_groupe__c];}
            return acctList;
    }
    Public String getaccountdata(){
        String datastr1 = '';
        String datastr2 = '';
        String datastr = '';
        List<Account> lstOfAcc =listOfAccount(); 
        for (integer i=0;i<lstOfAcc.size();i++){
     if (lstOfAcc[i].Parent.Name == null){
        datastr1 = datastr1 + '{"name": "';
        datastr1+= lstOfAcc[i].Name;
        datastr1+= '","parent": ';
        datastr1+= lstOfAcc[i].Parent.Name;
        datastr1+= ',"accountid": "';
        datastr1+= lstOfAcc[i].id;
        datastr1+= '","Statut__c": "';
        datastr1+= lstOfAcc[i].Statut__c;
        datastr1+='" }';
    }
     else{
       datastr2 = datastr2 + '{"name": "';
        datastr2+= lstOfAcc[i].Name;
        datastr2+= '","parent": "';
        datastr2+= lstOfAcc[i].Parent.Name;
        datastr2+= '","accountid": "';
        datastr2+= lstOfAcc[i].id;
        datastr2+= '","Statut__c": "';
        datastr2+= lstOfAcc[i].Statut__c;

        datastr2+='" },';  
     }
    }
    if(datastr2 == ''){datastr = '[' + datastr1 + ']';}
    else {
        datastr2 = datastr2.substring(0,datastr2.length()-1);
        datastr = '[' + datastr1 +','+ datastr2 + ']'; }
    return datastr;
    }
}

Я хочу создать тестовый класс.Ребятам нужна помощь, если кто-нибудь расскажет мне о тестовом классе этого апекс-класса.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

AParise указал на рассмотрение.Что нужно сделать в классе теста, шаг за шагом:

  • Вставьте некоторые объекты учетной записи в базу данных (тестовые прогоны не видят никаких данных по умолчанию, и это нормально)
  • Сохраните идентификатор из первой учетной записи и используйте его для Tete_de_groupe__c для остальных.

Вызовите функцию, примерно так:

   Account mainAccount = populateTestAccounts(); // Helper function
   Tree t = new Tree();
   t.setAcct(mainAccount);
   String result = t.getaccountdata();
   assert(....);

Это должно сделатьтрюк!

0 голосов
/ 30 мая 2018

Для модульных тестов, касающихся классов, подобных тому, который вы опубликовали, самый простой способ - подумать об ожидаемых результатах, учитывая путь к коду.Для каждого метода тестирования спросите себя: «Учитывая этот набор данных, когда я вызываю этот метод, я ожидаю, что это произойдет».

Давайте пройдемся по вашему методу «getaccountdata».«Учитывая этот набор данных ...» - Какие данные требуется для этого метода для правильного выполнения?Не вдаваясь слишком глубоко в вашу логику, это, вероятно, означает вставку некоторых sObjects Account.

"Когда я вызываю этот метод ..." - вызывается метод "getaccountdata".

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

...