+ Start a Discussion
Chitral ChaddaChitral Chadda 

test class ..strings

I have a trigger which displays list of contact address on account 
suppost i hav accnt a1 and related contact as c1, c2
there addres_for_contact__c field on contact 
and final_address_of_contact__c field on account
if for c1 ...addres_for_contact__c='a';
for c2 ..addres_for_contact__c='b';
then on account  ..final address of contact = a,b
trigger listOfContactsOnAccount on contact (after insert , after update,after delete){ 
  set<id> accountIdSet = new set<id>();
  
  if( trigger.isInsert|| trigger.isUpdate){
    for(contact c : trigger.new){
      accountIdSet.add(c.AccountId);
    }
  }

  if(trigger.isDelete){
    for(contact c: trigger.old){
      accountIdSet.add(c.AccountId);
    }
  }
            
  //2.create map
  List<contact> cont = [ Select AccountId, Address_for_contact__c from contact where AccountId IN : accountIdSet ]; 
    
    //using a map of lists instead of a map of contacts
    Map<id,List<contact>> accountContactsMap = new map<id, List<contact>>();
    for(contact c : cont){
      //check if a entry in the map exists for the account
      if(!accountContactsMap.containsKey(c.accountId)){
        //if it doesnt then create one
        accountContactsMap.put(c.accountId, new List<Contact>());
      }
      //get the contact list for the account and add the contact in
      accountContactsMap.get(c.accountId).add(c);
    }
  
    List<Account> accountsToUpdate= new List<Account>();
    string l='';
    
              for(contact cn :trigger.new)
   {
     if(accountContactsMap != null)
         { 
              list<contact> aci = accountContactsMap.get(cn.AccountId);  
              account ac = new account(id=cn.AccountId);
                  {
                    for(contact c : aci)
                         
                         { if(l==null)
                          
                              {
                              l =   c.Address_for_Contact__c ;        
                              }
                             else
                             {
                             l= l+','+c.Address_for_contact__c;
                             }
                         }     
                             
               
                          ac.Final_address_of_contacts__c = l;
                          accountsToUpdate.add(ac);
                    }  
              
          }
          
   }
 update accountsToUpdate;  
}

here is the test class
@isTest
public class testlistOfContactsOnAccount
{
public static testMethod void accountaddress()
{


account acc = new account();
acc.Name='account name';
//acc.Final_address_of_contacts__c ='agsah,bawdgh';
insert acc;


List<Contact> clist = new List<Contact>();

contact ct1 = new contact(AccountId=acc.Id);
ct1.LastName='abc';
ct1.Address_for_contact__c='agsah';
clist.add(ct1);

contact ct2 = new contact(AccountId=acc.Id);
ct2.LastName='xyz';
ct2.Address_for_contact__c='bawdgh';
clist.add(ct2);
//ct2.accountid=acc.id

insert clist;

string l = null;
for(contact c : cList)
{
 if(l == null)
 { l= c.Address_for_contact__c;
 
 }
 else
 {
 l=l+','+c.Address_for_contact__c;
 }
}


acc.Final_address_of_contacts__c=l;
update acc;
account updt =[ select id,Final_address_of_contacts__c from account where id=:acc.id];
system.assertEquals(l, updt.Final_address_of_contacts__c);

  }
  }

when i do run test it shows pass : but there is 0 % code coverage 
i m unsure what cud b d reason 
Gabriel TuerkGabriel Tuerk
You didn't start the test or stop it.  Use test.startTest() and test.stopTest() bracking the methods you want to cover

https://developer.salesforce.com/page/An_Introduction_to_Apex_Code_Test_Methods
Chitral ChaddaChitral Chadda
@isTest
public class testlistOfContactsOnAccount
{
public static testMethod void accountaddress()
{


account acc = new account();
acc.Name='account name';
//acc.Final_address_of_contacts__c ='agsah,bawdgh';



List<Contact> clist = new List<Contact>();

contact ct1 = new contact(AccountId=acc.Id);
ct1.LastName='abc';
ct1.Address_for_contact__c='agsah';
clist.add(ct1);

contact ct2 = new contact(AccountId=acc.Id);
ct2.LastName='xyz';
ct2.Address_for_contact__c='bawdgh';
clist.add(ct2);
//ct2.accountid=acc.id
test.startTest();

insert acc;
insert clist;

string l = null;
for(contact c : cList)
{
 if(l == null)
 { l= c.Address_for_contact__c;
 
 }
 else
 {
 l=l+','+c.Address_for_contact__c;
 }
}


acc.Final_address_of_contacts__c=l;
update acc;
test.stopTest();

account updt =[ select id,Final_address_of_contacts__c from account where id=:acc.id];
system.assertEquals(l, updt.Final_address_of_contacts__c);

//List<Contact> deleteList = new List<Contact>();

  //  deleteList.add(ct1);
  //  delete deleteList;
    
//account updt1 =[ select id,Final_address_of_contacts__c from account where id=:acc.id];
//system.assertEquals('karol bagh', updt1.Final_address_of_contacts__c);

  }
  }

still 0 % coverage
MithunPMithunP
Hi Chitral,

Use (SeeAllData=true) like below at starting of test class.

@isTest(SeeAllData=true)

Best Regards,
Mithun.
Chitral ChaddaChitral Chadda
i get error
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, listOfContactsOnAccount: execution of AfterInsert

caused by: System.DmlException: Update failed. First exception on row 0; first error: MISSING_ARGUMENT, Id not specified in an update call: []

Trigger.listOfContactsOnAccount: line 62, column 1: []