2017-03-06 1920 views
0

apexクラス、テストクラス、およびapexクラスを呼び出すプロセスビルダを持つパッケージをデプロイします。私がクラスを開発したサンドボックスでは、コードカバレッジは100%です。別のサンドボックス/プロダクションに展開しようとしたとき、コードカバレッジが65%になったため、失敗しました。Salesforceにプロセスビルダーでapexクラスをデプロイできません

プロセスビルダが展開され、コード全体が結果としてカバーされていないため、プロセスビルダが非アクティブであるためです。私はこれをどのように進めるべきですか?私はすでに次の操作を実行しようとしてい

  • は、クラスを展開する前にそれをアクティブにするために最初のプロセスビルダを展開します。プロセスビルダの展開に失敗しました。
  • プロセスビルダーなしでクラスをデプロイします。コードカバレッジは65%でした。
  • さらに多くのケースに対応できるようにテストクラスを変更します。プロセスビルダーで動作するようにコードを変更したため、これをテストする方法が見つからないため、これは不可能でした。
  • プロセスビルダーがアクティブ化され、非アクティブ化されたときにテストコードを実行しました。プロセスクラスは、テストクラスにレコードが挿入されたときに呼び出されるため、非アクティブ化時には65%のカバレッジ、アクティブ化された場合は100%のカバレッジを示しました。

私のコードは、顧客の電子メールを受け取り、CryptoUtil.generateHashDigestメソッドを使用してハッシュに変換して、ハッシュされた電子メールのフィールドに保存します。

Public static void newRecord(List<Account> listAccounts) { 
    for(Account a : listAccounts) { 
     Account updacc=[select id from account where id = :a.id]; 
     String message = String.valueof(a.get('Customer_Email__pc')); 
     String hashDigest = CryptoUtil.generateHashDigest(message); 
     updacc.Hashed_email__pc = HashDigest; 
     update updacc; 
    } 
} 

プロセスビルダーを使用するために挿入/更新されたアカウントレコードのクローンを作成する必要がありました。この方法を使用すると、変更はクローンでのみ行われます。プロセスビルダを使用しない場合、テストクラスはHashed_email__pcフィールドの実際のハッシュ値ではなくNull値を取得し、テストに失敗します。プロセスビルダを使用すると、クローンで行われた変更が実際のレコードに反映され、テストに合格します。私がこのコードセクションを呼び出すテストメソッドを持っていなくても、プロセスビルダーがそれをカバーするので、テストは成功します。

プロセスビルダーが無効になっているときに正しい値が返されるテストクラスを作成する方法を理解できません。 DMLを使用してレコードを挿入する必要があります。そのため、クローンを作成できます。

この場合、頂点クラスをどのようにテストする必要がありますか?

+0

を軌道に乗る必要があります。 – EricSSH

+0

私はこのコードを101以上のアカウントに使用する予定でした。その問題に直面しないようにコードをどのように改善すべきですか?それはプロセスビルダでも機能しますか? – Aish

+0

代わりに非同期頂点を使用しても問題ありませんか? – Aish

答えて

1

私はこれをeyedballedが、これは、あなたがこのコードが正しくないと、あなたが固定取得する必要がある101個の以上のアカウントを、ロードした場合は正常に動作しないでしょう

public static void newRecord(List<Account> listAccounts) 
{ 
    List<Account> accountsToUpdate = new List<Account>(); 

    for(Account a : listAccounts) 
    { 
     String message; 
     String hashDigest; 

     Account account = new Account(); 

     if(a.Customer_Email__pc != null) 
     { 
      message = String.valueof(a.get('Customer_Email__pc')); 
      hashDigest = CryptoUtil.generateHashDigest(message); 
      account.Hashed_email__pc = HashDigest; 
      account.ID = a.ID; 
      accountsToUpdate.add(account); 
     }   
    } 

    if(!accountsToUpdate.isEmpty()) 
    { 
     update accountsToUpdate; 
    } 
} 



@isTest 
private class Test_Account 
{ 
    // -------- Variables -------- 
    private static List<Account> testAccount; 

    // -------- Shared Methods -------- 
    // Initialization of test data example 
    private static void init(Integer testType) 
    { 
     testAccount = new List<Account>(); 

     if(testType == 1) 
     { 
      for(Integer i = 0; i < 10; i++) 
      { 
       Account a = new Account(); 
       //build your accounts.. 
       testAccount.add(a); 
      } 

      insert testAccount; 
     } 
    } 

    // -------- Test Methods -------- 
    private static testMethod void testAccountHash() 
    { 
     init(1); 

     Test.startTest(); 
     //Because this is an actual public method, I would just test the method 

     newRecord(testAccount); 

     Test.stopTest(); 

     List<Account> accountResult = [SELECT .... FROM Account]; 


     //Assert 
     System.assertNotEquals(...) 

    } 
} 
+0

ありがとう!意味あり。そして、それは動作します。 – Aish

0

非アクティブなPBを展開する際に問題が発生しました。サンドボックスがプロダクションよりも新しいバージョンになっているために、PBのデプロイメントの失敗がないことを確認してください。新しいリリースのプレビューウィンドウでは、サンドボックスは今後リリースされることがよくあります。

プロセスビルダーを対象とするテストクラスを作成し始めました。 PBを介して処理される予想されるシステム動作をテストするためのテストを書くことができます。例:レコードの更新では、クラスによってさまざまな更新が行われ、PBはさまざまな変更を行い、電子メールアラートを送信します。テストクラスを拡張して、PBが行う更新をカバーし、期待されたときに電子メールを送信することを確認することができます。

これが役に立ちます。

0

PBを非アクティブとしてプッシュしていますか?それともあなたのパッケージで活発ですか? コードをプッシュするためにEclipce/Migrationツールまたは変更セットを使用していますか? あなたのパッケージでPBが有効な場合は、Scottのようにorgバージョンの問題になる可能性があります。 回避策は、PBに頼らずにテストクラスでクラスを直接テストすることです。オブジェクトレコードに対してCRUDを実行し、テストクラスでPBロジックをシミュレートしてコードを完全にテストできます。

+0

プッシュするとPBが私のパッケージでアクティブになっています。私はチェンジセットを使用しています。私は、直接クラスをテストすることができない理由を説明するコードで私の質問を更新しました。あなたはその回避策を知っていますか? – Aish

関連する問題