为apex类编写测试类

时间:2018-05-29 14:08:38

标签: 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 :(得分:0)

对于类似于您发布的类的单元测试,最简单的方法是在给定代码路径的情况下考虑预期结果。对于每种测试方法,请问自己:“鉴于这组数据,当我调用此方法时,我预计会发生这种情况。”

让我们来看看你的“getaccountdata”方法。 “鉴于这组数据......” - 这种方法需要哪些数据才能正确执行?如果不深入了解逻辑,这可能意味着插入一些Account sObjects。

“当我调用此方法时......” - 正在调用“getaccountdata”方法。

“我希望这会发生......” - 这是你的断言发挥作用的地方。您使用特定值创建了帐户sObject,因此请验证这些值是否已传播到方法返回值中。

答案 1 :(得分:0)

AParise指出了这一考虑。您需要在测试课程中逐步完成的任务:

  • 将一些帐户对象插入数据库(测试运行默认情况下看不到任何数据,这没关系)
  • 保留第一个帐户的ID,并将Tete_de_groupe__c用于其他帐户。

调用该函数,大致如下:

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

这应该可以做到!