Ein Kunde teilte mit, dass er keine Anpassungen mehr in die Produktion übertragen kann, weil eine bestimmte Testklasse nicht durchläuft.
Die Testklasse wirft die folgende Fehlermeldung aus:
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_EXECUTE_FLOW_TRIGGER, The record couldn’t be saved because it failed to trigger a flow.
Offensichtlich hat es was mit FLOWS zu tun...
Im Setup unter Create > Workflows & Approvals > "Process Builder" nachgeschaut, und festgestellt, dass mehrere Prozesse konfiguriert wurden.
Welcher ist der Richtige?
Um den richtigen Prozess zu finden, schaue ich mir die entsprechende Log-Ausgabe der Testklasse genauer an, und finde die folgenden Zeilen:
Der Prozess heisst "New Contact" und er läuft nicht durch, weil "UserRole" nicht existiert.
Habe den Prozess "New Contact" unter die Lupe genommen. Dieser enthält eine simple Inhaber-Zuweisung:
Obwohl "UserRole" nirgendwo im Prozess ausgewertet oder geschrieben wird, wird diese Information im Hintergrund ausgewertet.
Das heisst, die von der Testklasse erzeugten Daten sind nicht vollständig.
Im Test werden einige Daten von einem on the fly erzeugten User generiert.
Das User-Objekt wie folgt überarbeitet:
Testklasse laufen lassen. Success.
Die Testklasse wirft die folgende Fehlermeldung aus:
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_EXECUTE_FLOW_TRIGGER, The record couldn’t be saved because it failed to trigger a flow.
Offensichtlich hat es was mit FLOWS zu tun...
Im Setup unter Create > Workflows & Approvals > "Process Builder" nachgeschaut, und festgestellt, dass mehrere Prozesse konfiguriert wurden.
Welcher ist der Richtige?
Um den richtigen Prozess zu finden, schaue ich mir die entsprechende Log-Ausgabe der Testklasse genauer an, und finde die folgenden Zeilen:
Der Prozess heisst "New Contact" und er läuft nicht durch, weil "UserRole" nicht existiert.
Habe den Prozess "New Contact" unter die Lupe genommen. Dieser enthält eine simple Inhaber-Zuweisung:
Obwohl "UserRole" nirgendwo im Prozess ausgewertet oder geschrieben wird, wird diese Information im Hintergrund ausgewertet.
Das heisst, die von der Testklasse erzeugten Daten sind nicht vollständig.
Im Test werden einige Daten von einem on the fly erzeugten User generiert.
Das User-Objekt wie folgt überarbeitet:
User obj = new User(); ........ if(obj.UserRoleId == null) { UserRole r = new UserRole(name = 'TEST ROLE'); Database.insert(r); obj.UserRoleId = r.Id; }
Testklasse laufen lassen. Success.
Kommentare
Kommentar veröffentlichen