+ Start a Discussion
Chitral ChaddaChitral Chadda 

test class issue

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;  
}
 
@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 
SonamSonam (Salesforce Developers) 
If you see these lines:


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;

you are already updating the value of the address in acc with the required 
 value which is not needed.

What should happen is:

You create the account(correct)
insert the account(correct)
You create the contacts(correct)
insert the contacts(correct) >> This line will call the trigger and auto update the value of address field in the acc such that you need not again update it in the test method.

All you need to do next is:
run an SOQL to get the address field on the acc:

account updt =[ select id,Final_address_of_contacts__c from account where id=:acc.id];

and compare it to the values of the contact address, something like this:


system.assertEquals("<contact1 address>,<contact2 address>", acc.Final_address_of_contacts__c);

To learn more, go through:
http://teachmesalesforce.wordpress.com/2011/05/07/how-to-write-a-trigger-test/