Apex-Testfehler und Codeabdeckungsfehler bei Salesforce-Deployments beheben

Produktions-Deployments erfordern bestandene Apex-Tests und mindestens 75% Codeabdeckung, und Salesforce blockiert die Freigabe, bis beide Bedingungen erfüllt sind.

Tritt auf bei: Deployment in die Produktion oder einem vollständigen Sandbox-Refresh

Was das bedeutet

Salesforce verlangt, dass Deployments in die Produktion Apex-Tests ausführen und eine durchschnittliche Codeabdeckung von mindestens 75% über alle Classes und Trigger erreichen, wobei jeder Trigger eine gewisse Abdeckung benötigt. Ein Deployment schlägt fehl, mit einer Auflistung der Assertion oder Exception jedes fehlgeschlagenen Tests, sobald ein Test eine unbehandelte Exception wirft, eine Assertion fehlschlägt oder die durchschnittliche Abdeckung der Org unter diesen Schwellenwert fällt.

Dies gilt nur für Deployments in die Produktion und vollständige Sandboxes mit RunLocalTests oder RunAllTestsInOrg; Deployments in Developer-Sandboxes oder Scratch-Orgs mit NoTestRun überspringen die Anforderung vollständig, weshalb Abdeckungslücken oft erst am Releasetag auffallen.

Diagnose

Häufige Ursachen

Ein Test macht eine Assertion auf Daten, die durch nicht verwandten Code geändert wurden
Ein neu deployter Trigger oder Flow ändert ein Feld, auf das der Test eine Assertion macht, sodass der erwartete Wert des Tests nicht mehr übereinstimmt, obwohl der Test selbst nicht angefasst wurde.
Neuer Code ohne abdeckende Tests ausgeliefert
Eine Class oder ein Trigger wurde hinzugefügt oder erweitert, ohne dass eine entsprechende Testmethode existiert, wodurch die durchschnittliche Abdeckung der Org unter 75% fällt.
Test hängt von org-spezifischen Daten oder Konfiguration ab
Der Test fragt vorhandene Datensätze, Record Types oder Einstellungen ab, statt eigene Daten zu erstellen, sodass er in einer Org besteht und in einer anderen fehlschlägt, in der diese Daten nicht existieren.

Die Lösung

  1. Fehler zuerst lokal reproduzieren
    Führen Sie die vollständige lokale Testsuite mit Abdeckung gegen Ihre Sandbox aus, bevor Sie den Code anfassen, damit Sie den echten Fehler debuggen und nicht ein veraltetes Deploy-Log.
    sf apex run test --test-level RunLocalTests --code-coverage --result-format human --wait 20
  2. Tests für jeden neuen Code vor dem Deployment schreiben
    Fügen Sie Testmethoden hinzu, die neue Classes und Trigger ausüben, damit die durchschnittliche Abdeckung der Org vor der Freigabe 75% übersteigt.
  3. Tests eigenständig machen
    Schreiben Sie Tests so um, dass sie ihre eigenen Testdaten mit @TestSetup oder Test.startTest() erstellen, statt sich auf Datensätze zu verlassen, die zufällig in der Ziel-Org existieren.
In der Praxis

Wie Serpent das verhindert

Die VS-Code-Erweiterung von Serpent zeigt Testergebnisse und Abdeckung direkt an der Aufgabe an, sodass eine Abdeckungslücke oder eine fehlgeschlagene Assertion sichtbar wird, bevor eine Aufgabe eingereicht wird, statt erst bei einem Produktions-Deploy entdeckt zu werden. Siehe die Bibliothek der Salesforce-Deploymentfehler.

Releases
Aufgaben
Orgs
v2.8.3 · Produktion
Komponenten
AccountTrigger
OpportunityFlow
DashboardLWC
PermissionSet_A
EmailTemplate
0 von 5 bereit
Serpent-KI-Review
Analysiere…
Keine Breaking Changes
Testabdeckung: 94%
Abhängigkeiten erfasst
Delta validiert
Warte auf KI-Review…
✓ In Produktion deployed · gerade eben

Prävention

Merges an Abdeckung koppeln, nicht nur an Bestehen/Fehlschlagen
Lassen Sie CI bei jedem Pull Request fehlschlagen, der die org-weite Abdeckung unter 75% senkt, nicht nur bei einem harten Testfehler, damit die Lücke nie eine Freigabe erreicht.
Niemals Assertions auf Datensatzzahlen ohne WHERE-Scoping machen
Beschränken Sie jede Assertion-Query auf die vom Test selbst erstellten Datensätze, damit später hinzugefügte, nicht verwandte Automatisierung die Assertion nicht stillschweigend bricht.
RunLocalTests-Validierung vor jeder Produktionsfreigabe ausführen
Starten Sie ein Check-only-Deployment mit RunLocalTests vor der eigentlichen Freigabe, damit Fehler mit ausreichend Zeit zur Behebung sichtbar werden, nicht während des Deployment-Fensters.
Häufige Fragen

APEX TEST FAILURES, beantwortet

Garantiert 75% Abdeckung, dass ein Deployment gelingt?
Nein. Abdeckung ist ein Mindestschwellenwert, kein Qualitätsmaßstab. Jeder Test muss trotzdem tatsächlich bestehen; eine Suite kann 75% Abdeckung erreichen und das Deployment trotzdem scheitern lassen, wenn auch nur ein Test eine unbehandelte Exception oder eine fehlgeschlagene Assertion wirft.
Braucht jede einzelne Class 75% Abdeckung?
Nein, der Schwellenwert von 75% ist ein org-weiter Durchschnitt. Einzelne Classes können darunter liegen, solange der Gesamtdurchschnitt die Marke erreicht, wobei jeder Trigger dennoch mindestens etwas Abdeckung benötigt.
Warum schlägt ein Test, der nie geändert wurde, plötzlich fehl?
Etwas anderes in derselben Transaktion hat sich geändert: Ein neuer Trigger, Flow oder eine Validation Rule berührt jetzt Daten, auf die der Test eine Assertion macht. Prüfen Sie, was sonst noch zusammen mit dem fehlgeschlagenen Test deployt wurde.

Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.

In unter 15 Minuten eingerichtet. Keine DevOps-Einstellung nötig.

Neugierig auf schnelleres Shipping, bevor Sie einsteigen? Sprechen wir

Unverbindlich.