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
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 :
- Dans la Developer Console, sélectionnez Fichier | Nouveau | Classe Apex.
- Dans le champ Nom, saisissez le nom du déclencheur :
TestEmployeeChangeTrigger
. - 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.'); } }
- 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.
- 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 !