2012-01-13 13 views
1

コードカバレッジを改善するためにテストクラスのロールアップサマリーフィールドの値を設定しようとしています。どうすればいいのですか?Apexテストクラス - テストクラスのロールアップカウントフィールドを設定する方法

public class clsPreferredIASetExt { 

    List<PreferredIA__c> preferredias; 
    public static PreferredIA__c[] tobeClosed = new PreferredIA__c[0]; 
    public static PreferredIA__c[] newPreIAs = new PreferredIA__c[0]; 
    public static PreferredIA__c loopadd; 
    public static PreferredContact__c[] contactlists = new PreferredContact__c[0]; 
    public static Account[] InvoicedAccounts = new Account[0]; 
    public static PreferredIA__c[] monkey; 

    public clspreferrediaSetExt(ApexPages.StandardSetController controller) { 
     preferredias = (List<PreferredIA__c>) controller.getSelected(); 
    } 

    public void getInitCloseInv() { 
     tobeclosed = [select id, Account__c, Account__r.id, Account__r.Name, 
          Account__r.AccountNumber, Specialist__c, 
          PreferredInvoice__c, Status__c 
         from PreferredIA__c where Status__c = 'Invoiced' limit 150]; 

     list<string> testme = new list<string>{}; 
     for(PreferredIA__c a:tobeclosed) { 
      testme.add(a.Account__r.id);  
     } 

     InvoicedAccounts = [select id, EligibleIAs__c, PreferredOverride__c, 
            Preferred_Territory__r.rep__c, LastSurveyDate__c, 
            InitialInspectionComplete__c, Program_level__c, 
            PreferredExempt__c, Account_Status__c, 
            Active_IAs__c, Last_Training__c 
          from Account where id IN :testme]; 

     Contactlists = [select id, Account__c 
          from PreferredContact__c where Account__c IN :testme]; 

     for(PreferredIA__c q:tobeclosed) { 
      q.Status__c = 'Closed'; 
     } 

     for(Account z:invoicedaccounts) { 
      /**************************************************************** 
       The following condition is where I am trying to set the z.EligibleIAs__c 
       which is a roll up count field of PreferredIA__c objects associated with 
       the account. 
      ****************************************************************/ 
      if(z.EligibleIAs__c == 0 
       && z.Program_Level__c == 'Preferred' 
       && !z.PreferredExempt__c 
       && (z.Account_Status__c == 'Active' 
        || z.Account_Status__c == 'Product Only')) { 

       loopadd = new PreferredIA__c(); 
       system.debug(z.id); 
       system.debug(z.Account_Status__c); 
       loopadd.Account__c = z.id; 

       if(z.PreferredOverride__c != null) { 
        loopadd.Specialist__c = z.PreferredOverride__c; 
       } 
       else { 
        loopadd.Specialist__c= z.Preferred_territory__r.Rep__c; 
       } 

       for(PreferredContact__c q:contactlists) { 
        if(q.Account__c == z.id) { 
         loopadd.PreferredContact__c = q.id; 
        } 
       } 

       loopadd.CreatedDate__c = Date.Today(); 
       if(z.Last_training__c != null) { 
        loopadd.DueDate__c = z.Last_Training__c.AddDays(365); 
       } 
       else { 
        loopadd.DueDate__c = Date.Today().AddDays(365); 
       } 
       loopadd.initial__c = false; 
       loopadd.Status__c = 'Unacknowledged'; 
       newPreIAs.add(loopadd); 
      } 
      z.InitialInspectionComplete__c = true; 
     } 

     try { 
      update tobeclosed; 
      update invoicedaccounts; 
      insert newPreIAs; 
     } 
     catch(system.dmlexception q) { 
      system.debug(q); 
      system.debug(invoicedaccounts); 
      system.debug(newPreIAs); 
     } 
    } 

    public void ReceivePPW() { 
     monkey = [select id, Status__c from PreferredIA__c 
        where id in :preferredias and status__c = 'Training Completed']; 

     for (PreferredIA__c m:monkey) { 
      m.status__c = 'Awaiting Invoice'; 
     } 

     update monkey; 
    } 
} 

答えて

2

私は実際にあなたがフィールドへの書き込みをしようとしている場所を確認することはできません - またはそれは働いていなかったので、あなたはそれを削除しましたか?

それ以外の理由は、ロールアップサマリーフィールドに書き込むことができないということです。そのフィールドに値が必要な場合は、親レコードが適切なフィールド値を持つ子レコードを挿入して、集計フィールドが値を計算するようにする必要があります。

また、最初にPerferredIA__cに問い合わせていることがわかります。テストメソッドはシステム内のデータに依存してはいけません。テストコードに自分のレコードを挿入する必要があります。その理由は、関連するデータがない組織にデプロイしようとすると、テストが失敗し、その後、デプロイメントが失敗するからです。

+0

非常にありがとうございます! – user1139662

0

これらの状況では、mock objects (or just variables simulating expected values)は、Laceyが示唆するようにテスト値を挿入するのと同じです。このテクニックは、コールアウトを行うときに100%カバレッジを達成するために必要です。コールの瞬間にテストが終了するなどです。

+0

非常にありがとうございます。を試そうと思う。 – user1139662