Before Knowing how to write Test Classes In Apex Salesforce we should why we write Test Classes.
Need Of Writing Test Classes
We write Test Classes In Apex Salesforce for Unit Testing. We get to find the bugs in our code and fix it to give better output. Testing gives the Code Coverage, first of all we should know What Code Coverage is? It is the line of code which are covered through testing.The code must have 75% code coverage in order to be deployed to Production. It is discussed further below.
Data Access
@isTest annotation:
The test class are written under @isTest annotation. By using this annotation for test class we maintain code limit as it is not counted in it.
Create Raw-Data At First:
The Test Class In Apex Salesforce does not have access to any of the data which is stored in the related Salesforce org by default.We need to create raw-data for test class in our test class itself. By adding SeeAllData=true to @isTest annotation i.e. @isTest(SeeAllData=true) grants the access to the all the data of the related Salesforce org.
Code
Test Class for trigger:
Here is the Trigger for which we will be writing test class:
trigger bookTrigger on book__c (before insert) { /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ list<book__c> li = trigger.new; for(book__c str : li){ str.Price__c = str.Price__c * 0.8; } }
Now the test class will be as follows:
@isTest private class bookTriggerTest { /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ static testMethod void validateHelloWorld() { Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100); System.debug('Price before inserting new book: ' + b.Price__c); // Insert book insert b; // Retrieve the new book b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id]; System.debug('Price after trigger fired: ' + b.Price__c); // Test that the trigger correctly updated the price System.assertEquals(80, b.Price__c); } }
Test Class For Extension:
Here is the Controller Extension for which we will be writing test class:
public with sharing class contactext { /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ public contact con; public contactext(ApexPages.StandardController std){ con = (contact)std.getrecord(); } public pagereference savedata(){ try{ insert con; apexpages.addmessage(new apexpages.Message(apexpages.severity.confirm,'Contact Saved')); }catch(exception e){ apexpages.addMessages(e); } pagereference pg = page.Task02_Contactext; pg.setredirect(true); return pg; } }
Now the test class will be as follows:
@isTest public class contactextTest { /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ @isTest static void testMethodForException()//Checking Records for exception { Account testAccount = new Account();//Insert Account testAccount.Name='Test Account' ; insert testAccount; Contact cont = new Contact(); cont.FirstName ='Test'; cont.LastName ='Test'; cont.accountid =testAccount.id; insert cont; ApexPages.StandardController sc = new ApexPages.StandardController(cont); contactext contactextObj = new contactext(sc);//Instantiate the Class try { contactextObj.savedata();//Call the Method } catch(Exception e) {} list<account> acc = [select id from account];//Retrive the record integer i = acc.size(); system.assertEquals(1,i);//Test that the record is inserted } @isTest static void testMethod1()//Testing the insertion method { Account testAccount = new Account();//Insert Account testAccount.Name='Test Account' ; insert testAccount; Contact cont = new Contact(); cont.FirstName ='Test'; cont.LastName ='Test'; cont.accountid =testAccount.id; try { ApexPages.StandardController sc = new ApexPages.StandardController(cont); contactext contactextObj = new contactext(sc);//Instantiate the Class contactextObj.savedata(); } catch(Exception ee) {} list<account> acc = [select id from account];//Retrive the record integer i = acc.size(); system.assertEquals(1,i);//Test that the record is inserted } }
Test Class For Controller:
Here is the class for which we will be writing test class:
public with sharing class retrieveAcc { /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ public list<account> getacc(){ list<account> li = [select Name,AccountNumber,AccountSource,ParentId from account]; if(li!=null && !li.isEmpty()){ return li; }else{ return new list<account>(); } } }
Now the test class will be as follows:
@isTest private class retriveAccTest { /** * Webkul Software. * * @category Webkul * @author Webkul * @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com) * @license https://store.webkul.com/license.html */ @isTest static void testmeth1(){ //Insert Record for testing the If situation account acc1 = new account(name = 'acc1', AccountSource = 'Web'); account acc2 = new account(name = 'acc2', AccountSource = 'Web'); list<account> accList = new list<account>(); accList.add(acc1); accList.add(acc2); insert accList; //Test that Records are Inserted list<account> obj1 = new retrieveAcc().getacc(); system.assertequals(obj1.size(),2); //Delete Records For testing the Else situation delete accList; //Test that Records are Deleted list<account> obj2 = new retrieveAcc().getacc(); system.assertEquals(obj2.size(),0); } }
How to Run A Test Class In Developer Console
Step-1:
Open the Developer Console Window.
Step-2:
Step-3:
Step-4:
Code Coverage:
Support
That’s all for Implementing Test Classes In Apex Salesforce, still have any issue feel free to add a ticket and let us know your views to make the code better https://webkul.uvdesk.com/en/customer/create-ticket/
Read More:How to Delete it using Apex in Salesforce?
Leave a Comment
Comments (0)