Unit-Tests von anderen Klassen starten

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Unit-Tests von anderen Klassen starten

Beitrag von ralf.wenzel (Top Expert / 3990 / 207 / 281 ) »
Moin,

ich habe folgendes Problem: Ich habe in einer Klasse (nennen wir sie ZCL_A) Änderungen zu machen, die in einer von n Klassen (ZCL_1, ZCL_2, etc.) zu Unit-Test-Fehlern führen. Das fällt aber nicht bzw zu spät auf, weil diese Klassen nicht mit im Transportauftrag stehen.

Jetzt denke ich mir folgendes: Wenn es in ZCL_A einen Unit-Test gäbe, der die Tests in ZCL_1, ZCL_2, ... ausführen würde, würde eine Freigabe des Transports von ZCL_A auf einen Fehler laufen. Dafür müsste der Unit-Test auf einen Fehler laufen, wenn einer der Unit-Tests der n Klassen auf einen Fehler läuft.

Alternativ könnte man ZCL_1, ZCL_2, etc. auch in den Transport mit aufnehmen, aber wenn ich daran denke, denke ich auch dran, deren Unit-Tests auszuführen.

Ich brauch was Idioten.... ähhh... Ralf-sicheres 😉


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Unit-Tests von anderen Klassen starten

Beitrag von a-dead-trousers (Top Expert / 4477 / 229 / 1203 ) »
Ich hab deswegen angefangen meine Unit-Tests in abstrakten Klassen AUßERHALB der eigentlich zu testenden Klassen zu organisieren. Dadurch ist der "Rumpf" der in den Klassen verbleiben muss (SETUP, TEARDOWN, etc.) nur noch sehr klein und fällt bei einer Kopie bzw. Verwendung in einer anderen Klasse daher kaum ins Gewicht. So kann man dann die notwendigen Tests bei allen abhängigen Klassen ebenfall ohne viel Aufwand einbinden (... INHERITING FROM ... ).

Alternativ haben wir bei uns auf dem Entwicklungssystem auch einen täglich laufenden Job der alle vorhandenen Unit-Tests ausführt und das Ergebnis per Mail versendet. Das hilft zwar nicht für die Transportfreigabelogik aber zumindest sieht man noch relativ zeitnah wenn man ein Upsi gebaut hat.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Unit-Tests von anderen Klassen starten

Beitrag von ralf.wenzel (Top Expert / 3990 / 207 / 281 ) »
Das machen wir bei jedem Transport auf einem Staging-System. Ich will es aber vor dem Transport wissen 😉


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Unit-Tests von anderen Klassen starten

Beitrag von ewx (Top Expert / 4901 / 327 / 646 ) »
Liegt da nicht ein Design-Fehler vor, wenn das passiert, was du beschrieben hast, Ralf?

Ansonsten könntest du einen kleinen Runner bauen, der in ZCL_A die entsprechen Unit Tests für ZCL_n durchführt.

Re: Unit-Tests von anderen Klassen starten

Beitrag von ralf.wenzel (Top Expert / 3990 / 207 / 281 ) »
Nein, ist es nicht. Es ist gar nicht so selten, dass man eine Klasse ändert und das Auswirkungen auf die Unit-Tests einer anderen Klasse hat. Oft testet man mit Unit-Tests auch ganze Prozess-Teile. Hatte ich z. B., als ich IDOCs erstellt habe und wissen wollte, ob aus dem Objekt, das ich hatte, korrekte IDOCs erstellt werden. Die IDOC-Erstellung funktioniert ja, die Frage ist, ob ich auch hinreichend Daten dafür übergebe oder ob was fehlt. Das sehe ich erst, wenn ich das IDOC erstellt habe.

Wenn ich SICHER und final wüsste, welche Daten übergeben werden müssten, müsste ich nicht testen 😉 Also rufe ich den "IDOC-Ersteller" der SAP auf, um zu sehen, ob da ein Fehler entsteht oder nicht. Der befindet sich in einer anderen Klasse von mir.

Wirklich völlig unabhängig Unit-Tests hab ich bisher selten gesehen. Eigentlich müsste man z. B. Buchungen testen ohne Rückgriff auf das Customizing, aber wer mockt schon das ganze Customizing, das für eine Buchung notwendig ist? Sowas wie Buchungsschlüssel kann man schlichtweg voraussetzen.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Unit-Tests von anderen Klassen starten

Beitrag von black_adept (Top Expert / 4155 / 134 / 958 ) »
ralf.wenzel hat geschrieben:
13.12.2025 20:13
Alternativ könnte man ZCL_1, ZCL_2, etc. auch in den Transport mit aufnehmen, aber wenn ich daran denke, denke ich auch dran, deren Unit-Tests auszuführen.
Die Unit-Test werden üblicherweise mittels "SUBMIT" in einem eigenen Kontext ohne globale Daten etc. ausgeführt. Und wohl auch mit gutem Grund. Damit hast du eigentlich recht schlechte Karten das zu tun was du ursprünglich vorhast.

Andererseits hast du doch mit dem obigen Kommentar eine recht einfache Lösung vorgegeben.

Schreib einen Unit-Test in Klasse ZCL_A, der prüft ob in allen offenen Transportaufträgen für Teilobjekte oder das gesamte Objekt ZCL_A auch die anderen Klassen vorhanden sind.

Und wenn du es "schick" oder einfach wiederverwendbar haben willst machst du das nicht hart codiert sondern über eine anzulegende Abhängigkeitentabelle, welche du rekursiv abklappern kannst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Unit-Tests von anderen Klassen starten

Beitrag von ewx (Top Expert / 4901 / 327 / 646 ) »
BAdI CTS_REQUEST_CHECK
Alle Klassen in den Paketen ermitteln und dort einen runner darauf ausführen und auswerten.

Re: Unit-Tests von anderen Klassen starten

Beitrag von ralf.wenzel (Top Expert / 3990 / 207 / 281 ) »
😂 Danke Enno für den Link auf meinen eigenen Thread. Ich hatte noch im Hinterkopf, dass ich meinte, sowas Ähnliches schon mal gehabt zu haben (in ganz anderem Kontext), aber jetzt weiß ich es.

Ralf *wird wohl langsam alt
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Unit-Tests von anderen Klassen starten

Beitrag von msfox (Specialist / 406 / 61 / 79 ) »
So wie a-dead-trousers es schreibt, hätte ich es auch gemacht. Die eigentlich Klasse mit den Testmethoden muss doch sowieso "abstract" sein. Bei einer globale Klasse meckert die SAP sonst rum.
D.h. man könnte in seinem Paket die abstracte Klasse ableiten. Dann sollte sie auch ausgeführt werden.
Der zweite Punkt ist der regelmäßige Job. Ich war im Java-Projekt, da wurde auf dem Jenkens-Server der Build gemacht und dort auch die Unit-Test ausgeführt.
Prüft die Transportfreigabe nur die Unit-Tests in der Klasse aus dem Transport? Wäre ja sinnvoll, wenn man bei der Freigabe irgendwo festlegen könnte, von welchen Paketen die Unit-Test ausgeführt werden sollen.
--
Andererseits: " Ich habe in einer Klasse (nennen wir sie ZCL_A) Änderungen zu machen, die in einer von n Klassen (ZCL_1, ZCL_2, etc.) zu Unit-Test-Fehlern führen."
Dann sind aber deine Änderungen nicht abwärtskompatibel. Irgendwer hat ja mal in der Klasse ZCL_A festgelegt, dass genau diese Funktionen bereit stehen. Dafür sollte also die ZCL_A ihre Unit-Tests haben. Wenn du da was änderst, schlagen die Unit-Test fehlt.
Oder anders: Warum die Klassen ZCL...1, ZCL...2 Unit-Test, die sich auf die Klasse ZCL_A beziehen. ZCL...1 soll doch sich testen und nicht ZCL_A.

Re: Unit-Tests von anderen Klassen starten

Beitrag von ralf.wenzel (Top Expert / 3990 / 207 / 281 ) »
Ja, die Transportfreigabe prüft nur, was im Transport ist. Und das mit dem Jenkins-Server machen wir auch, aber mittels SAP. Wir transportieren also in ein System und dort werden die Tests ausgeführt (alles über Jenkins automatisiert) und kriegen eine Mail, wie die Tests gelaufen sind.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Unit-Tests von anderen Klassen starten

Beitrag von ewx (Top Expert / 4901 / 327 / 646 ) »
msfox hat geschrieben:
16.12.2025 10:43
Oder anders: Warum die Klassen ZCL...1, ZCL...2 Unit-Test, die sich auf die Klasse ZCL_A beziehen. ZCL...1 soll doch sich testen und nicht ZCL_A.
Das war auch mein Gedanke. Wenn das der Fall ist, dann werden in Unit tests von ZCL_1/2 Abhängigkeiten zu ZCL_A mitgetestet, die dort nicht hingehören.

Re: Unit-Tests von anderen Klassen starten

Beitrag von ralf.wenzel (Top Expert / 3990 / 207 / 281 ) »
Hier verweise ich mal auf das was ich mit den IDocs geschrieben habe. Wie gesagt: Ich habe selten wirklich komplett unabhängige Tests gesehen, weil die oft auch nicht viel aussagen. Ja, ich kann eine Erwartungshaltung erstellen von der ICH GLAUBE, dass sie umfassend die Erwartungshaltung der nächsten Klasse im Prozess widerspiegelt -- aber genau DAS ist dann halt das Problem, weil ich auch massiv daneben liegen kann.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2359
Views
ABAP Unit Tests
von jocoder » 21.07.2017 15:25 • Verfasst in ABAP Objects®
9
Antw.
3070
Views
Sinn von Unit-Tests
von SaskuAc » 03.04.2019 13:33 • Verfasst in ABAP® für Anfänger
4
Antw.
1054
Views
EHP 8 -- Unit-Tests in Funktionsgruppen
von ralf.wenzel » 16.08.2022 10:03 • Verfasst in ABAP® Core
7
Antw.
6334
Views
Report zum Ausführen von Unit-Tests
von ralf.wenzel » 08.01.2022 19:01 • Verfasst in ABAP Objects®
20
Antw.
10287
Views
Globale Klassen oder Lokale Klassen
von ZF_SAPler » 29.11.2022 13:47 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Zukunft des ABAP Entwicklers
vor 3 Tagen von ralf.wenzel 6 / 312
HR in der Zukunft?
vor 3 Tagen von waltersen 5 / 2517
VS Code statt Eclipse
vor 4 Tagen von rob_abc 3 / 137

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zukunft des ABAP Entwicklers
vor 3 Tagen von ralf.wenzel 6 / 312
HR in der Zukunft?
vor 3 Tagen von waltersen 5 / 2517
VS Code statt Eclipse
vor 4 Tagen von rob_abc 3 / 137