Skip to main content
Join the Agentforce Hackathon on Nov. 18-19 to compete for a $20,000 Grand Prize. Sign up now. Terms apply.

Testen des Änderungsereignisauslösers

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:

  • Schreiben einer Apex-Testklasse für den Apex-Änderungsereignisauslöser
  • Ausführen des Tests und Sorgen für Testabdeckung für den Apex-Änderungsereignisauslöser
Hinweis

Hinweis

Lernen Sie auf Deutsch? Beginnen Sie die Aufgabe in einem Trailhead Playground in der Sprache Deutsch und verwenden Sie für die Navigation die in Klammern angegebenen Übersetzungen. Kopieren und fügen Sie nur die Angaben in Englisch ein, da zur Überprüfung der Aufgabe Daten in Englisch benötigt werden. Wenn Sie die Aufgabe in Ihrer deutschen Organisation nicht bestehen, empfehlen wir Ihnen folgende Vorgehensweise: (1) Stellen Sie das Gebietsschema auf USA um, (2) legen Sie Englisch als Sprache fest (Anweisungen dazu finden Sie hier) und (3) klicken Sie erneut auf die Schaltfläche "Check Challenge" (Aufgabe überprüfen).

Weitere Details dazu, wie Sie die übersetzte Trailhead-Umgebung optimal nutzen können, finden Sie unter dem Badge "Trailhead in Ihrer Sprache".

Testen des Änderungsereignisauslösers

Nachdem Sie erfahren haben, wie ein Änderungsereignisauslöser geschrieben wird, lassen Sie uns jetzt einen Test dafür schreiben. Das Testen Ihres Auslösers ist nicht nur als bewährte Vorgehensweise wichtig, sondern wird von der Plattform auch erzwungen. Ehe Sie Apex-Auslöser packen oder in der Produktion bereitstellen können, müssen Sie für Apex-Tests und ausreichende Codeabdeckung sorgen. 

Sie sorgen für Testabdeckung für den Apex-Auslöser, indem Sie eine Apex-Testklasse mit einer oder mehreren Testmethoden schreiben. Die Struktur einer Testmethode für Änderungsereignisauslöser sieht wie folgt aus.

@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
    // ...
}

Dies ist die erste Anweisung, die sie in die Testmethode einschließen müssen:

Test.enableChangeDataCapture();

Diese Anweisung aktiviert alle Einheiten für die Datenänderungserfassung und stellt sicher, dass die in einer Testmethode vorgenommenen Änderungen an Salesforce-Datensätzen Änderungsereignisse auslösen. Diese Methode aktiviert alle Einheiten nur für den Test und hat keinen Einfluss auf die Auswahl der Einheit "Datenänderungserfassung" für die Organisation.

Nachdem Sie "Datenänderungserfassung" aktiviert haben, führen Sie einige DML-Vorgänge durch und rufen dann die Test.getEventBus().deliver()-Methode auf. Die Methode übermittelt die Ereignisnachrichten vom Testereignisbus an den entsprechenden Änderungsereignisauslöser und bewirkt, dass der Auslöser aktiviert wird.

Test.getEventBus().deliver();

Nachrichten zu Teständerungsereignissen werden im Test-Ereignisbus veröffentlicht, der vom Salesforce-Ereignisbus getrennt ist. Sie werden in Salesforce nicht dauerhaft gespeichert und nicht an Ereigniskanäle außerhalb der Testklasse übergeben. Eigenschaften von Nachrichten zu Teständerungsereignissen, wie z. B. die Wiedergabe-ID, werden im Testkontext zurückgesetzt und spiegeln nur die Werte von Testereignisnachrichten wider.

Erstellen und Ausführen eines Tests für den Auslöser

Lassen Sie uns in die Praxis gehen und die Testklasse TestEmployeeChangeTrigger erstellen. Die Testmethode in der Klasse erstellt den Testdatensatz "Employee" und aktualisiert den Datensatz. Jeder dieser Vorgänge aktiviert den Auslöser für das Änderungsereignis für "Employee". Der Test stellt die Ausführung des Auslösers sicher, indem er die Aufgabe, die der Auslöser erzeugt hat, abfragt und die Anzahl der Aufgaben überprüft.

Wenn Sie die Testklasse in der Developer Console ausführen, sind die Debug-Protokolle auf der Registerkarte "Logs" (Protokolle) verfügbar. Für Apex-Tests ist es nicht erforderlich, Debug-Protokolle im Setup für die Einheit "Automatisierter Prozess" einzurichten.

So erstellen Sie die Testklasse:

  1. Wählen Sie in der Developer Console File | New | Apex Class aus.
  2. Geben Sie in das Feld "Name" einen Namen für den Auslöser ein: TestEmployeeChangeTrigger.
  3. Ersetzen Sie den Standardinhalt durch den folgenden Code.
@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. Klicken Sie im Fenster "Testklasse" auf Ausführen. Nach Abschluss der Testausführung wird auf der Registerkarte "Tests" der Status des Testlaufs angezeigt.
  2. Klicken Sie auf die Registerkarte Tests und erweitern Sie den Bereich Overall Code Coverage (Gesamtcodeabdeckung). Die Codeabdeckung für EmployeeChangeTrigger liegt bei 100 %, was das Ergebnis der Ausführung dieses Tests ist.

Sie sind nun bereit, einen Änderungsereignisauslöser mit einer Testklasse zu schreiben, damit Sie ihn in der Produktion bereitstellen können!

Ressourcen

Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"