apex code testing webinar
TRANSCRIPT
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 1/27
Apex Code Testing and
Coverage Best Practices
Ryan Spraetz
Product Manager
Anand B NarasimhanPrincipal Consultant
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 2/27
Got Twitter?@forcedotcom / #forcewebinar
Facebook?
facebook.com/forcedotcom
‘Like’ us in the month of March and enter to win an iPod Touch
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 3/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Safe harbor statement under the Private Securities Litigation Reform Act of 1995: This presentation may
contain forward-looking statements that involve risks, uncertainties, and assumptions. If any suchuncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc.
could differ materially from the results expressed or implied by the forward-looking statements we make. Allstatements other than statements of historical fact could be deemed forward-looking, including any
projections of subscriber growth, earnings, revenues, or other financial items and any statements regarding
strategies or plans of management for future operations, statements of belief, any statements concerningnew, planned, or upgraded services or technology developments and customer contracts or use of our
services.
The risks and uncertainties referred to above include – but are not limited to – risks associated withdeveloping and delivering new functionality for our service, our new business model, our past operatinglosses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web
hosting, breach of our security measures, the immature market in which we operate, our relatively limitedoperating history, our ability to expand, retain, and motivate our employees and manage our growth, new
releases of our service and successful customer deployment, and utilization and selling to larger enterprise
customers. Further information on potential factors that could affect the financial results of salesforce.com,inc. is included in our annual report on Form 10-K filed on February 24, 2011 and in other filings with the
Securities and Exchange Commission. These documents are available on the SEC Filings section of the
Investor Information section of our Web site.
Any unreleased services or features referenced in this or other press releases or public statements are notcurrently available and may not be delivered on time or at all. Customers who purchase our services should
make the purchase decisions based upon features that are currently available. Salesforce.com, inc.assumes no obligation and does not intend to update these forward-looking statements.
Safe Harbor
P
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 4/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Agenda
Testing philosophy
Introduction to Apex Testing
Writing tests and test tools
Testing best practices and patterns
Testing anti-patterns
Testing Roadmap
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 5/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Testing Philosophy
Testing is key to successful development
Testing requirements
– 75% code coverage
– Strive for better
Automation, automation, automation
– Test suites catch regressions
– Manual testing does not scale!
Apex Test Hammer
– Your 8M tests are part of our release process
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 6/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
How do I test my code?
Testmethods! How easy is that?
Can only be called from test code
@isTest classes do not count towards code size limits
public class HelloDevs{
public static String getGreeting(){
return (‘Test Away!’);
}
static testmethod void testGreeting(){
String gr = HelloDevs.getGreeting();
System.assertEquals(‘Test Away!’,gr);
}
}
@isTest
private class TestHelloDevs{
static testmethod void testGreeting(){
String gr = HelloDevs.getGreeting();
System.assertEquals(‘Test Away!’,gr);
}
}
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 7/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Anatomy of a TestMethod
Demo
Additional Resources on Apex Test classes and Test Methods
How to Write Good Unit Tests Apex Developer Guide
public class AccountProcessor{
public static Account ProcessAccount(Account acc){
//Do work here, for example:
acc.numberOfEmployees = 10;
return acc;
}
public static testmethod void testProcessAccount(){
//Create test data
Account acc = new Account(name = ‘testAccount’);
//Run the code you want to test
Test.startTest();
acc = ProcessAccount(acc);
Test.stopTest();
//Assert results
System.assertEquals(acc.numberOfEmployees, 10);
}
}
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 8/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Verifying my code
System.assert();
System.assertEquals();
If you are not using asserts in your test code, you areprobably not writing effective tests!
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 9/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
System.runAs(User){ }
Test how your code interacts with your organization’s
sharing model
Does not mimic CRUD/FLS
Special System functions for testing
public class TestAsUser{
public static testmethod void testAsUser(){
User u = [SELECT id FROM User LIMIT 1];
System.runAs(u){
//Code here will respect sharing model
}
}
}
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 10/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Test.StartTest() and Test.StopTest()
Extra set of governor limits to test your processes
Special System functions for testing
public class TestAsUser{
public static testmethod void testProcess(){
//Do data set up here
insert new Account(name = ‘test’);
//Do your testing here
Test.startTest();
ProcessAccounts();
Test.stopTest();
//Do your aserts here
System.assert(…)}
}
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 11/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Test.isRunningTests()
ApexOne: Fewer limits!
From over 70 individual limits to 16
Tests now get the same governor limits as regular executions
Coming in Summer ‘11 at the end of the presentation…
New in Spring ’11!
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 12/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Apex Testing Cookbook Recipes
Testing Http Callouts
Testing when you have a “private” security model
Using Test.isRunningTest
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 13/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Testing HTTP Callouts
Visualforce mash up to display financial transactions for an Account
HTTP REST API to get transaction data from externalsource
XML Based request/response
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 14/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Testing “PRIVATE” sharing model
Display total Opportunity Amount on an account
– Displayed through an inline Visualforce page in Account detail
Rollup depends on User’s profile
– Hardware Product Managers should only include Hardware
opportunities
– Software Product Managers should only include Software
opportunities
Account Sharing Model is “PRIVATE” – Opportunity Access is “PRIVATE”
Apex Controller runs in “without sharing” mode
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 15/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Using Test.isRunningTest
Custom Email functionality
– Uses standard standard Email Templates
– Uses Apex Email to send the email
Email templates presented to the end user will varybased on user’s Profile
– Profile specific Email Templates are stored in different folders
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 16/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Summary
Use Apex Object Oriented constructs to simulate“Mock Object” pattern
– Apex Interfaces
– Apex Class Inheritance and overloading
Use “Apex Manual Sharing” to open up test data
records when using “Private” security model
Use Test.isRunningTest to execute logic specific to test
methods
– Only use this as an exception (to workaround areas that are hard
to test)
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 17/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Apex Testing – Anti Patterns
@IsTestpublic class TestCoverageAntiPatterns{
public static void testmethod testButDontTest(){}
public static void testmethod testWithExistingData(){}
public static void testmethod testFakeTestCoverage(){}
}
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 18/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
public static void testmethod testButDontTest()
Trigger to set the Close
Date of the earliest
Opportunity that is
closing on the account
whenever an
Opportunity is
updated / inserted.
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 19/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
public static void testmethod testButDontTest()
Account’s attributes are notvalidated after the Opportunity
is successfully inserted
Trigger has 75%
test coverage, and
hence can be
deployed toproduction
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 20/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
public static void testmethod testWithExistingData()
Hard coded RecordType Id. Record Typescreated in Sandbox are not guaranteed to
have the same Id in production..
This Test class could fail when attempting
to deploy to a production instance.
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 21/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
public static void testmethod testingDoneRight()
Trigger has 100% test coverage,
and does not depend on any datain the org
Get the Record Type Id based on the Nameof the Record Type
Assert the Account Attributesafter the opportunity is inserted
successfuly
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 22/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
public static void testmethod testFakeTestCoverage()
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 23/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Will be able to deploy toproduction without actually
testing anything.
fakeXXX() methods do not perform any businesslogic.
public static void testmethod testFakeTestCoverage()
Fake methods count
towards your Org’s
Apex limits (2MB)
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 24/27
Join the conversation on Twitter: #forcewebinar @forcedotcom
Apex Testing Roadmap
Asynchronous Test Execution – already in pilot
Asynchronous Testing API
Test data partitioning
Ability to check org features
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 25/27
Resources
Developer Resources
– http://developer.force.com
Apex Testing Resources
– How to Write Good Unit Tests – Apex Developer Guide
Apex Code Discussion Boards
Cookbook
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 26/27
Q & AGet a chance to win an iPod Nano by
completing the survey at
http://bit.ly/3_30webinar
7/29/2019 Apex Code Testing Webinar
http://slidepdf.com/reader/full/apex-code-testing-webinar 27/27