Skip to main content

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? In diesem Badge ist für die praktischen Trailhead-Aufgaben Englisch als Bearbeitungssprache festgelegt. Übersetzungen werden zur Referenz in Klammern angegeben. Vergewissern Sie sich, dass Sie in Ihrem Trailhead-Playground (1) das Gebietsschema auf USA und (2) die Sprache auf Englisch festgelegt haben. (3) Verwenden Sie zum Kopieren und Einfügen nur die englischen Werte. Die zugehörigen Anweisungen finden Sie hier.

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.
  4. @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.');
        }
    }
  5. Klicken Sie im Fenster "Testklasse" auf Ausführen. Nach Abschluss der Testausführung wird auf der Registerkarte "Tests" der Status des Testlaufs angezeigt.
  6. 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

Lernen Sie weiter kostenlos!
Registrieren Sie sich für einen Account, um fortzufahren.
Was ist für Sie drin?
  • Holen Sie sich personalisierte Empfehlungen für Ihre Karriereplanung
  • Erproben Sie Ihre Fähigkeiten mithilfe praktischer Aufgaben und Quizze
  • Verfolgen Sie Ihre Fortschritte nach und teilen Sie sie mit Arbeitgebern
  • Nutzen Sie Mentoren und Karrierechancen