Text preview & study summary

Salesforce PD1 - Platform Developer I - Apex SOQL LWC Triggers Testing Deployment

A free sample of 5 questions from this quiz, shown in full with answer choices and explanations. No interactivity — everything is visible on this page for study and review.

Want to test your knowledge? Launch the Interactive Exam Simulator

Question 1

A developer is deploying Apex classes and triggers from a Developer Sandbox to Production. What is required by Salesforce for the deployment to succeed?

Answer choices

  • A. At least 75% code coverage across all Apex code in the org, including all trigger tests passing

  • B. At least 75% code coverage across ALL Apex code in the org (not just the code being deployed), with no test method failures — every trigger must have at least 1% coverage (Correct)

  • C. 100% code coverage on the specific classes being deployed

  • D. Code coverage is only required for Apex Triggers, not Apex classes

Explanation

Salesforce's deployment requirements for Production: (1) At least 75% code coverage across ALL Apex code in the org (the aggregate across all classes and triggers combined must be ≥75%); (2) All Apex tests must pass (no failing test methods); (3) Every trigger must have at least some code coverage (though the 75% threshold is the org-wide aggregate). The coverage is measured at the org level, not just for the code being deployed — adding poorly covered code to an org that's barely above 75% can cause a deployment failure. Option A (all trigger tests passing) is a partial answer. Option C (100% on deployed code) is more than required — 75% is the threshold. Option D is incorrect — both triggers AND classes require coverage.

Question 2

A developer deploys code using the Salesforce CLI (sf deploy metadata). The deployment includes an Apex Trigger with an associated test class. Which command validates the deployment in a Sandbox WITHOUT actually deploying?

Answer choices

  • A. sf deploy metadata --target-org MySandbox --check-only --test-level RunSpecifiedTests --tests MyTriggerTest (Correct)

  • B. sf deploy metadata --target-org MySandbox --dry-run

  • C. sf test run --target-org MySandbox

  • D. sf deploy metadata --target-org MySandbox --validate

Explanation

The Salesforce CLI sf deploy metadata command with --check-only flag performs a "check-only" (validation) deployment that: runs all deployment validations (metadata format, dependencies), compiles Apex code, runs specified test classes without committing changes to the org. --test-level RunSpecifiedTests with --tests MyTriggerTest specifies which tests to run during validation. This is the pre-deployment validation step that confirms the deployment will succeed before making live changes. Option B (--dry-run) is not a valid Salesforce CLI flag. Option C (sf test run) executes tests in the target org but doesn't validate a deployment package. Option D (--validate) is a partial command — check-only is the correct flag and --validate is not a standalone Salesforce CLI flag.

Question 3

A developer needs to make a callout to an external REST API from an Apex trigger. The API call is synchronous and may take up to 3 seconds. What is the correct Apex architecture for this callout?

Answer choices

  • A. Make the callout directly in the trigger using HttpRequest in a loop for each record

  • B. Callouts are not allowed directly in Apex Triggers (after DML has been performed in the same transaction); use a @future method or Queueable Apex to execute the callout asynchronously after the trigger transaction completes (Correct)

  • C. Use a Scheduled Apex class to batch all callouts every hour

  • D. Use a Platform Event to trigger a Flow that makes the callout

Explanation

Salesforce enforces a key rule: you cannot make a callout from a trigger context AFTER DML has been performed in the same transaction (you'll get "You have uncommitted work pending" error). The correct pattern is to: use a @future(callout=true) method or Queueable Apex (which also supports callouts) called from the trigger. The trigger collects necessary data (record IDs, field values), passes them to the @future/@queueable method, the trigger transaction commits, and the async method executes the callout in a separate transaction context. Option A (direct callout in trigger) fails with an exception if DML occurred before the callout in the same transaction. Option C (Scheduled Apex) adds unnecessary delay and doesn't handle individual record callouts contextually. Option D (Platform Event + Flow) could work but is more complex than @future for this pattern.

Question 4

A developer needs to write an Apex class that sends different email templates based on whether a Case is "Technical" or "Billing" type. The email recipient is the Case Contact. Which Apex email approach is MOST flexible for selecting templates dynamically?

Answer choices

  • A. Use System.debug() to log which template should be sent

  • B. Use Messaging.SingleEmailMessage with setTemplateId() to select the appropriate email template based on Case type: query the EmailTemplate record for the appropriate template name/API name, set the templateId on the SingleEmailMessage, set targetObjectId to the Case Contact, and use saveAsActivity=true to log the email (Correct)

  • C. Use Process Builder to send emails based on Case type

  • D. Use Workflow Rules with two Email Alert actions, one for each type

Explanation

Messaging.SingleEmailMessage with setTemplateId() enables dynamic template selection in Apex: (1) Query the EmailTemplate table by API name or folder: EmailTemplate template = [SELECT Id FROM EmailTemplate WHERE Name = 'Technical Case Template']; (2) Create Messaging.SingleEmailMessage msg = new Messaging.SingleEmailMessage(); msg.setTemplateId(template.Id); msg.setTargetObjectId(caseContactId); msg.setWhatId(caseId) (for merge fields from Case); (3) Messaging.sendEmail(new List<Messaging.Email>{msg}). The logic to select Technical vs. Billing template is handled by Apex conditional logic (if/else or switch statement). Option A (System.debug) does nothing functionally. Option C and D (Process Builder/Workflow) are declarative tools that work but lack the flexibility of Apex code for complex template selection logic.

Question 5

A developer is writing code that needs to determine if the current code execution is running in a test context (inside a @isTest method). Which Apex method detects this?

Answer choices

  • A. Trigger.isTest

  • B. System.isRunningTest() (Correct)

  • C. Test.isRunning()

  • D. Database.isTest()

Explanation

System.isRunningTest() returns true when the current code is executing within a test context (@isTest annotated method). This is useful for: conditional logic that should behave differently in tests (e.g., skip external callouts), mock responses in test context, or preventing side effects during test execution. For example: if (!System.isRunningTest()) { /* make real callout */ } else { /* return mock data */ }. Note: using Test.isRunning() (Option C) is the same concept but the correct method name is System.isRunningTest(). Options A and D don't exist in Apex. Note: while Test.isRunning() is sometimes referenced colloquially, the official method is System.isRunningTest().