请帮我为我的triggerclass编写测试类

时间:2015-07-28 06:22:02

标签: salesforce apex test-coverage

我已经编写了一个触发器,可以在创建“创意”记录时向特定电子邮件组发送电子邮件。我必须根据两个多选选项列表字段的组合向组发送电子邮件,因此我在“自定义设置数据”中添加了这些组合,并使用它来获取电子邮件ID。以下是我的代码。

Public Class IdeaTriggerOperations1
{
Public Static Void NotifyBUonNewDiscussion1(List<Idea> IdeaIds)
{ 
    Set<String> CategoryNameSet = new Set<String>();
    Set<String> ProductNameSet = new Set<String>();

    //Set and clear emailAddresses
    String[] emailAddressess = new String[40];
    emailAddressess.clear();

    //Set Messaging
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
    Messaging.reserveSingleEmailCapacity(1);

    //Get Email Template Id
    EmailTemplate et = [SELECT Id FROM EmailTemplate WHERE developerName = 'Idea_New_Discussion_Posted_BU'];


    For(Idea I : IdeaIds)
    {       
        String completeEmailList = '';                                  
        for(String str : I.Categories.split(';'))
        {
            CategoryNameSet.add(str);
            system.debug('-----------CategoryNameSet--------'+CategoryNameSet);
        } 
        If(I.Product__c != NULL)
        {
            for(String str1 : I.Product__c.split(';'))
            {
                ProductNameSet.add(str1);
                system.debug('-----------ProductNameSet--------'+ProductNameSet);
            }
        }
        Else{
            ProductNameSet = NULL; }

        // Generating Email List values for BU ... 
        If(i.Include_BU__c == True)
        { 
            If(!ProductNameSet.contains('Automata') && !ProductNameSet.contains('DRAM') && !ProductNameSet.contains('eMCP') && !ProductNameSet.contains('eMMC') && !ProductNameSet.contains('HMC') && !ProductNameSet.contains('MCP') && !ProductNameSet.contains('NAND') && !ProductNameSet.contains('NOR') && !ProductNameSet.contains('SSD') && !ProductNameSet.contains('N/A'))
                {
                    Idea_Custom_Setting__c nc = Idea_Custom_Setting__c.getValues('Product All');
                    completeEmailList += nc.BU_Email_Id__c+ ';' ;
                }

            List<Idea_Custom_Setting__c> IdeaEmails = Idea_Custom_Setting__c.getall().values();
            for(Idea_Custom_Setting__c m : IdeaEmails)
            {
                If(CategoryNameSet.contains(m.Category__c) && (ProductNameSet.contains(m.Product__c)||ProductNameSet==NULL))
                {
                    completeEmailList += m.BU_Email_Id__c + ';' ;
                } 
                If(CategoryNameSet.contains('Automotive') || CategoryNameSet.contains('Connected Home') || CategoryNameSet.contains('Consumer') || CategoryNameSet.contains('IMM'))
                If(ProductNameSet.contains(m.Combined_Category__c))
                {
                    completeEmailList += m.BU_Email_Id__c + ';' ;
                }               
            }  
        }//End of first IF statement

        // Generating Email List values for SME ...
        If( i.LastModifiedDate == i.CreatedDate)
        {         
            List<Idea_Custom_Setting_For_SME__c> SMECustSet = Idea_Custom_Setting_For_SME__c.getall().values();
            for(Idea_Custom_Setting_For_SME__c  N : SMECustSet)
            {
                If(CategoryNameSet.contains(N.Category_SME__c)){
                If(ProductNameSet.contains('N/A'))
                {
                    completeEmailList += N.SME_Email_Id__c + ';' ;
                }   }                 
                If(CategoryNameSet!=NULL && ProductNameSet.contains(N.Product_SME__c))
                {
                    completeEmailList += N.SME_Email_Id__c + ';' ;
                }
                If(!ProductNameSet.contains('Automata') && !ProductNameSet.contains('DRAM') && !ProductNameSet.contains('eMCP') && !ProductNameSet.contains('eMMC') && !ProductNameSet.contains('HMC') && !ProductNameSet.contains('MCP') && !ProductNameSet.contains('NAND') && !ProductNameSet.contains('NOR') && !ProductNameSet.contains('SSD') && !ProductNameSet.contains('N/A')){
                If(ProductNameSet.contains(N.Special_Value__c))
                {
                    completeEmailList += N.SME_Email_Id__c + ';' ;
                }}
            }
        }

       system.debug('-----------completeEmailList--------'+completeEmailList);
       for(String str2 : completeEmailList.split(';'))
       {
           emailAddressess.add(str2);
       }

        //Set Message Properties
        mail.setTargetObjectId(i.CreatedById);
        mail.setWhatId(i.Id);
        mail.setTemplateId(et.Id);
        mail.setSenderDisplayName('SFDC Technical Discussion');
        mail.setToAddresses(emailAddressess);
        mail.setUseSignature(false);
        mail.setBccSender(false);
        mail.setSaveAsActivity(false);

        // Update the Post to set the SME Notified field to TRUE
       If(i.Include_BU__c == True){
       List<Idea> nIdea = [SELECT Id, BU_Notified__c FROM Idea WHERE Id IN: Trigger.newMap.keySet()];

            for (Idea o :nIdea){
                o.BU_Notified__c = True;
            }

            update nIdea; } 

    }
    // Send the email
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}}

当我使用我的测试类创建一个Idea记录时,我总是会收到错误消息:

  

System.DmlException:插入失败。第0行的第一个例外;第一个错误:CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY,IdeaTrigger1:执行AfterInsert

     

引起:System.EmailException:SendEmail失败。第0行的第一个例外;第一个错误:INVALID_EMAIL_ADDRESS,无效地址:: []

     

Class.IdeaTriggerOperations1.NotifyBUonNewDiscussion1:第114行,第1列Trigger.IdeaTrigger1:第9行,第1列:[]

1 个答案:

答案 0 :(得分:0)

没问题斯蒂芬。 我现在能够解决我的问题。

我在课堂上没有使用(SeeAllData = true),当我在创建Idea记录时引用社区ID时导致了这个问题。由于这一点,没有记录被插入。

谢谢!