-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SatzTest#hasSparteAsProdukt() fehlerhaft ?? #94
Comments
Das Problem hier ist die Doppeldeutigkeit von getSparte(). Ursprünglich war diese Methode vorgesehen, die Sparte zu bestimmen. Diese Funktionalität hat jetzt aber der SatzTyp übernommen, die eine getSparte()/hasSparte()-Methode hat. Abgesehen davon ist getSparte() jetzt überarbeitet, sodass folgende Unit-Test grün ist:
Statt getSparte() und hasSparte() sollte man lieber über den SatzTyp gehen. Will man dagegen tatsächlich das Feld "Sparte", so gibt es jetzt eine Methode |
Bitte Vorsicht bei der Verwendung der Formulierung "... Diese Funktionalität hat jetzt aber der SatzTyp übernommen." Anders sieht es z.B hier aus: http://www.gdv-online.de/vuvm/bestand/rel2023/ds0100.htm . Das ist die GDV-Satzart "0100". Hier gibt es keinen Spartenteil in der GDV-Satzart. Deshalb gilt natürlich hier: Dennoch: jede GDV-Struktur hat unabhängig vom Wert von Dabei entspricht der fachliche Inhalt des Feldes an Pos 011 bei 112 GDV-Satzarten dem Wert von Festzuhalten bleibt: Jedoch hat Konsequenterweise sollte auch die Methode
3 Fragen zu
|
Sowohl getSparte() und hasSparte() gibt es schon mit v0.9 seit 2013. getSparte() liefert dabei den Inhalt des ersten Felds mit Bezeichner "Sparte" (Byte-Adresse 11). Existiert das Feld mehrfach, liefert es das erste Feld zurück. Zu den Fragen:
|
Im Test wird ein Satz erzeugt mit
Satz bausparen = SatzRegistry.getInstance().getSatz(SatzTyp.of("0210.580"));
Für diesen Satz gilt:
bausparen instanceof Datensatz == true
Und weil Datensatz.java die von Satz.java geerbte Methode hasDatensatz() überschreibt, wird mit
bausparen.hasSparte()
in Wahrheit die Methode
Datensatz#hasSparte()
gerufen. Diese Methode schaut bei auf die Member
Datensatz.sparte
Sie ist bei der oben benutzen Satzerzeugung immer mit dem 2.Teil von SatzTyp besetzt sofern ein 2.Teil vorhanden ist.
Analoges gilt auch für
bausparen.getSparte()
.ERGO:
der Test belegt weder die Korrektheit von
Satz#hasSparte()
noch vonSatz#getSparte()
.Würde dieser Test angewendet auf einen Teildatensatz, müsste er z.B. lauten:
Das zeigt auf, dass in
Satz#hasSparte()
undSatz#getSparte()
unterschiedlich agiert wirdund führt zur Frage, wie diese beiden Methoden zu verstehen sind.
Wenn sie nur technischen Belangen dienen sollen, schlage ich als Änderung in Satz.java vor:
bzw.
Wenn sie fachlichen Belangen dienen sollen, schlage ich als Änderung in Satz.java vor:
bzw.
Ergänzung 17.03.2024:
Die Durchsicht der gesamten Lib hat gezeigt, dass
Satz#hasSparte()
undSatz#getSparte()
immer nur verwendetwerden, um letztlich eine Info über den Aufbau der Satzstruktur zu erhalten, d.h. über den GdvSatzartNamen z.B "0100", "0200", "0220.040", "0220.010.13.1". Damit dienen diese Methoden allein technischen Zwecken.
Beispiele:
für Satzart 0220.010.13.1 gilt:
Satz.hasSparte() == true;
(der GdvSatzartName hat mindestens 1 Punkt im Namen)für Satzart 0220.010.13.1 gilt:
Satz.getSparte() == 10;
(der GdvSatzartName gilt für eine Leben-Struktur)für Satzart 0100 gilt:
Satz.hasSparte() == false;
(der GdvSatzartName hat keinen Punkt im Namen)für Satzart 0100 gilt:
Satz.getSparte()
nicht erlaubt wgSatz.hasSparte() == false;
HIer ist jedoch zu beachten, dass bei allen Satzarten mit
Satz.hasSparte() == false;
sowie bei SA0210.000, SA0210.000, SA0220.000 und SA0221.000 dennoch an der ByteAdresse 011 ein Feld mit wohldefinierten Werten ungleich "000"vorhanden sein kann!
CAVE:
Satz.getSparte()
ist nicht zwingend identisch mit dem Inhalt zuSatz.getFeld(ByteAdresse.of(11)).getInhalt()
.Beispel: Für Satzart 0220.080 gilt
Satz.getSparte() == 80
. Da aber diese Satzart für die Sparten 80, 81,82, 83, 89, 90, 99, 100, 109, 120, 123, 124, 150, 210, 230, 231 verwendet wird (siehe SatzTyp,java), kann das Feld an
ByteAdresse 011 alle diese Werte beinhalten,
Fazit:
Eine neue Methode
SatzTest#hasSparteAsProdukt()
ist unnötig. Auch ist es in den besprochenen Methoden nicht relevant, welche Bezeichnung das Feld an Adresse 011 hat. Deshalb empfehle ich folgende Änderung in Satz.java:Mit diesen Methoden sind alle Tests grün.
The text was updated successfully, but these errors were encountered: