Skip to main content
Rejoignez-nous lors de l'événement TDX à San Francisco ou sur Salesforce+ les 5 et 6 mars pour la conférence des développeurs à l'ère des agents IA. Inscrivez-vous dès maintenant.

Test du déclencheur d’événements de modification

Objectifs de formation

Une fois cette unité terminée, vous pourrez :

  • Écrire une classe de test Apex pour le déclencheur d’événements de modification Apex
  • Exécuter le test et fournir la couverture de test pour le déclencheur d’événements de modification Apex
Remarque

Remarque

Vous souhaitez apprendre en français ? Commencez le défi dans un Trailhead Playground en français et utilisez les traductions fournies entre crochets pour naviguer. Copiez et collez uniquement les valeurs en anglais, car les validations de défi reposent sur les données en anglais. Si vous ne réussissez pas le défi dans votre organisation en français, nous vous recommandons (1) de définir le paramètre régional sur les États-Unis, (2) de définir la langue sur l’anglais en suivant les instructions ici, puis (3) de cliquer à nouveau sur le bouton « Vérifier le défi ».

Consultez le badge Trailhead dans votre langue pour découvrir comment profiter de l’expérience Trailhead traduite.

Test du déclencheur d’événements de modification

Maintenant que vous avez appris à écrire un déclencheur d’événements de modification, écrivons un test pour celui-ci. Il est important de tester votre déclencheur non seulement car il s’agit d’une bonne pratique, mais également car la plate-forme l’exige. Avant de pouvoir empaqueter ou de déployer en production des déclencheurs Apex, vous devez mettre en place des tests Apex et une couverture de code suffisante. 

Vous fournissez la couverture de test pour le déclencheur Apex en écrivant une classe de test Apex, qui comprend une ou plusieurs méthodes de test. La structure d’une méthode de test pour les déclencheurs d’événements de modification se présente comme suit :

@isTest static void testChangeEventTrigger() {
    // Enable all Change Data Capture entities for notifications.
    Test.enableChangeDataCapture();
    // Insert one or more test records
    // ...
    // Deliver test change events
    Test.getEventBus().deliver();
    // Verify the change event trigger’s execution
    // ...
}

La première instruction que vous incluez dans la méthode de test est la suivante :

Test.enableChangeDataCapture();

Cette instruction permet d’utiliser la capture des données de modification avec toutes les entités et garantit que les modifications d’enregistrements Salesforce effectuées dans une méthode de test activent des déclencheurs d’événements de modification. Cette méthode permet d’activer l’ensemble des entités uniquement pendant le test et ne modifie pas les paramètres de la capture des données de modification pour l’organisation.

Une fois que vous avez activé la capture des données de modification, effectuez quelques opérations DML, puis appelez la méthode Test.getEventBus().deliver(). Cette méthode transfère les messages d’événement du bus d’événements de test au déclencheur d’événements de modification correspondant et provoque l’activation du déclencheur.

Test.getEventBus().deliver();

Les messages de test des événements de modification sont publiés sur le bus d’événements de test, qui est distinct du bus d’événements Salesforce. Ils ne sont pas conservés dans Salesforce et ne sont pas livrés à des canaux d’événements en dehors de la classe de test. Les propriétés des messages de test des événements de modification, comme l’ID de lecture, sont réinitialisées en fonction du contexte du test et reflètent uniquement les valeurs des messages d’événements de test.

Création et exécution d’un test pour le déclencheur

Mettons-nous au travail et créons une classe de test intitulée TestEmployeeChangeTrigger. La méthode de test de la classe crée un enregistrement de test d’employé et met à jour l’enregistrement. Chacune de ces opérations provoque l’activation du déclencheur pour l’événement de modification Employee. Le test vérifie l’exécution du déclencheur en interrogeant la tâche créée par ce dernier et en comptant le nombre de tâches.

Lorsque vous exécutez la classe de test dans la Developer Console, les journaux de débogage sont disponibles dans l’onglet Journaux. Dans le cas des tests Apex, il n’est pas nécessaire de configurer les journaux de débogage dans Configuration relatifs à l’entité Processus automatisé.

Pour créer la classe de test :

  1. Dans la Developer Console, sélectionnez Fichier | Nouveau | Classe Apex.
  2. Dans le champ Nom, saisissez le nom du déclencheur : TestEmployeeChangeTrigger.
  3. Remplacez le contenu par défaut par le code suivant :
@isTest
public class TestEmployeeChangeTrigger {
    @isTest static void testCreateAndUpdateEmployee() {
        // Enable all Change Data Capture entities for notifications.
        Test.enableChangeDataCapture();
        // Insert an Employee test record
        insert new Employee__c(Name='e-101',
            First_Name__c='Astro',
            Last_Name__c='Test',
            Tenure__c=1);
        // Call deliver to fire the trigger and deliver the test change event.
        Test.getEventBus().deliver();
        // VERIFICATIONS
        // Check that the change event trigger created a task.
        Task[] taskList = [SELECT Id,Subject FROM Task];
        System.assertEquals(1, taskList.size(),
            'The change event trigger did not create the expected task.');
        // Update employee record
        Employee__c[] empRecords = [SELECT Id,OwnerId,First_Name__c,Tenure__c FROM Employee__c];
        // There is only one test record, so get the first one
        Employee__c emp = empRecords[0];
        // Debug
        System.debug('Retrieved employee record: ' + emp);
        // Update one field and empty another
        emp.First_Name__c = 'Codey';
        emp.Tenure__c = null;
        update emp;
        // Call deliver to fire the trigger for the update operation.
        Test.getEventBus().deliver();
        // VERIFICATIONS
       // Check that the change event trigger created a task.
       // We should have two tasks now, including one from the first trigger invocation.
      Task[] taskList2 = [SELECT Id,Subject FROM Task];
      System.assertEquals(2, taskList2.size(),
          'The change event trigger did not create the expected task.');
    }
}
  1. Dans la fenêtre de la classe de test, cliquez sur Exécuter le test. Une fois le test terminé, l’onglet Tests affiche le statut de l’exécution test.
  2. Cliquez sur l’onglet Tests et développez le volet Couverture globale du code. La couverture de code pour EmployeeChangeTrigger est de 100 % : c’est d’ailleurs le résultat renvoyé par le test.

Vous êtes maintenant prêt à écrire un déclencheur d’événements de modification avec une classe de test pour le déployer en production !

Ressources

Défi pratique

+ 500 points

Préparez-vous

Vous allez effectuer ce(tte) unité dans votre propre organisation pratique. Cliquez sur Lancer pour commencer ou cliquez sur le nom de votre organisation pour en choisir une autre.

Votre défi

Write a Test Class
Create a test method to provide test coverage for the OpportunityChangeTrigger that you created in the previous unit’s challenge.

Prework: Pass the previous unit’s challenge to create the trigger.
  • Create an Apex test class for your trigger modeled after the example TestEmployeeChangeTrigger code:
    • Class Name: TestOpportunityChangeTrigger
    • Method Name: testCreateAndUpdateOpportunity
  • Copy the body of the test method from the TestEmployeeChangeTrigger example class. You will modify it next.
  • In the test method, keep the first statement: Test.enableChangeDataCapture();
  • Create an opportunity:
    • Name: Sell 100 Widgets
    • StageName: Prospecting
    • CloseDate: Date.today().addMonths(3)
  • Call Test.getEventBus().deliver(); to fire the trigger.
  • Delete the verification section because you don't need to verify the trigger execution yet. You will do so later.
  • Modify the SOQL query to retrieve the StageName field from Opportunity.
    • Opportunity[] oppRecords = [SELECT Id,StageName FROM Opportunity];
    • Opportunity opp = oppRecords[0];
  • Update the stage name to Closed Won.
    • opp.StageName = 'Closed Won';
    • update opp;
  • Call Test.getEventBus().deliver(); to fire the trigger.
  • Query Task records using a SOQL query and verify that one task is returned.
    • Task[] taskList = [SELECT Id,Subject FROM Task];
    • System.assertEquals(1, taskList.size(), 'The change event trigger did not create the expected task.');
  • Run the test class and ensure that it passes and provides 100% coverage for the trigger.
Partagez vos commentaires sur Trailhead dans l'aide Salesforce.

Nous aimerions connaître votre expérience avec Trailhead. Vous pouvez désormais accéder au nouveau formulaire de commentaires à tout moment depuis le site d'aide Salesforce.

En savoir plus Continuer à partager vos commentaires