Sakthi S
Sakthi S

Reputation: 31

How to write a test class for an apex trigger

Can someone explain to me how to write a test class for an apex trigger like the following one?

trigger LeadAssignmentTrigger on Broker__c (before insert,before update) 
    {
       List<Broker__c > leadsToUpdate = new List<Broker__c >();
        for (Broker__c broker: Trigger.new)
        {     
            if (broker.Referral_ID__c!= NULL)
            {
                String str = broker.Referral_ID__c;
                Integer ln = str.Length();
                String likeStr = '%'+str.subString(ln-10, ln-7)+'%'+str.subString(ln-7, ln-4) +'%'+ str.subString(ln-4);

                // Find the sales rep for the current zip code
                List<User> zip = [select Id from User
                                       where MobilePhone Like : likeStr];

                // if you found one
                if (zip.size() > 0) 
                {    
                    //assign the lead owner to the zip code owner
                    broker.OwnerId = zip[0].Id; 
                    leadsToUpdate.add(broker);
                }
               else
                {
                    // Throw Error
                    broker.addError('Invalid Referrel ID');
                }
            } 
        }
     }

I am new to salesforce.Anyone help me to how to write apex class(test class) for above trigger.

@isTest 
private class LeadAssignmentTriggerTest 
{
    static testMethod void validateHelloWorld() 
    {


        User userObj =  new User( Id = UserInfo.getUserId() );
        userObj.MobilePhone = '5555555555';
        update userObj


        test.startTest();       
            try
            {
                Broker__c broker =  new Broker__c();
                broker.Referral_ID__c = '55555555';
                broker.City ='New York';
                // Add all required field here
                insert broker;
            }
            Catch(Exception ee)
            {
            }
        test.stopTest();    
    }
}

AccountBrowseExtensionTesttestAccountBrowseSystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, City is mandatory: [] Stack Trace: Class.AccountBrowseExtensionTest.testAccountBrowse: line 20, column 1 CloseActivityControllerTesttestCloseActivitySystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, City is mandatory: [] Stack Trace: Class.CloseActivityControllerTest.testCloseActivity: line 13, column 1 changeOwnerControllerTesttestchangeOwnerSystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, City is mandatory: [] Stack Trace: Class.changeOwnerControllerTest.testchangeOwner: line 20, column 1 cntactsclassTesttestcntactsSystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, City is mandatory: [] Stack Trace: Class.cntactsclassTest.testcntacts: line 13, column 1 LogACallControllerTesttestLogACallSystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, City is mandatory: [] Stack Trace: Class.LogACallControllerTest.testLogACall: line 14, column 1 RedirectControllerTesttestRedirectSystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, City is mandatory: [] Stack Trace: Class.RedirectControllerTest.testRedirect: line 20, column 1 TestAccountSharetestSystem.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Mobile Number is mandatory after Appointment is fixed.: [] Stack Trace: Class.TestAccountShare.test: line 40, column 1

Upvotes: 1

Views: 1142

Answers (1)

raym0nd
raym0nd

Reputation: 3262

You are writing a trigger for Broker__c on before insert and before update

So since it's a trigger, your code will run every time you insert or update a record.

To write a test class simply create two test methods:

  1. one to insert a Broker__c record
  2. one to update a Broker__c record

Check here on how to create test classes

By the way you should check the best coding practices on how to write a better trigger and handlers here

Edit: You should also remove the SOQL inside the loop and create a Map with your query outside the for loop

Upvotes: 1

Related Questions