Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   DUnit Vererbung/falsche Methode aufgerufen (https://www.delphipraxis.net/212454-dunit-vererbung-falsche-methode-aufgerufen.html)

TurboMagic 12. Feb 2023 16:57

DUnit Vererbung/falsche Methode aufgerufen
 
Hallo,

ich versuche gerade ein paar Unit Test Fehler in der DEC zu beheben.
Nach Korrektur eines Fehlers in den Testdaten bin ich jetzt über ein anderes
mich verwirrendes Problem gestoßen.

Es gibt im Unit Test eine Klasse TestTHash_Keccak_Base, von der erben alle
Keccak Hash Testklassen. Die TestTHash_Keccak_Base wiederrum erbt von
TestTHash_SHA3_Base, die wiederum von noch einer anderen erbt, was hier aber
keine Rolle spielt.

In der TestTHash_SHA3_Base gibt es eine strict protected Methode LoadTestDataFile.
In der Methode wird eine Methode AddLastByteForKeccakTest aufgerufen. Diese ist
als Virtual deklariert. Darf also überschrieben werden und liefert in der Klasse
TestTHash_SHA3_Base nur das wieder zurück, was man als Parameter rein gesteckt hat.

In der TestTHash_Keccak_Base soll die aber mit dem übergebenen Parameter einiges
anstellen und dementsprechend käme auch was anderes zurück. In dieser Klasse ist
die Methode als override gekennzeichnet.

Nur: führe ich das aus, lande ich eindeutig in der Implementierung aus der Klasse
TestTHash_SHA3_Base statt der aus TestTHash_Keccak_Base .

Hat irgendwer eine Idee warum?

Hier der Code:
https://github.com/MHumm/DelphiEncry...ECHashSHA3.pas

Grüße
TurboMagic

Uwe Raabe 12. Feb 2023 17:23

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Bei welchem der Tests passiert das denn?

TurboMagic 12. Feb 2023 18:18

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Sorry, hab's ich vergessen zu schreiben:
TestTHash_Keccak_224 TestCalcUnicodeString

Grüße
TurboMagic

jaenicke 12. Feb 2023 18:34

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Also wenn ich diesen Test ausführe, lande ich in der Methode aus TestTHash_Keccak_Base. Die Base-Methode wird nie ausgeführt. :freak:

TurboMagic 12. Feb 2023 18:46

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Hallo,

jetzt mal noch etwas ausführlicher:

Ich lande beim Ausführen von TestTHash_Keccak_224.TestCalcUnicodeString
in der TestTHash_SHA3_Base.LoadTestDataFile. Soweit noch so gut.
Nur der AddLastByteForKeccakTest dort drin springt nicht nach
TestTHash_Keccak_Base.AddLastByteForKeccakTest sondern nach
TestTHash_SHA3_Base.AddLastByteForKeccakTest

Grüße
TurboMagic

jaenicke 13. Feb 2023 10:37

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und das ist genau der eingecheckte Stand? Ich hatte es mit 10.4 und 11 getestet. Anbei der Screenshot von gestern.
Ich habe nur den einen Test durchlaufen lassen und auf TestTHash_SHA3_Base.AddLastByteForKeccakTest einen Haltepunkt gesetzt. Bei mir wird der nicht erreicht, dafür der in TestTHash_Keccak_Base.

Anhang 55826

TurboMagic 13. Feb 2023 11:23

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Moment! Mir dämmert was:
Im SetUp der Keccak_224 Test Klasse werden auch ein paar wenige Testdaten
per Code hinzugefügt, also nicht aus der Datei geladen. Da wird die richtige
Methode aufgerufen, der Breakpoint sollte also erst dann gesetzt werden,
wenn SetUp durch ist bzw. einen breakpoint an der Stelle in der Datei Laden
Methode aus der Basis Klasse setzen wo die Methode aufgerufen wird, die falsch
aufgerufen wird.

Sprich: die wird nur dort falsch aufgerufen wo das Laden der Daten aus der Datei
stattfindet. Beim Definieren der Testdaten per Code wird die richtige Variante
aufgerufen.

Grüße
TurboMagic

jaenicke 13. Feb 2023 13:19

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Wie schon geschrieben: Ich komme gar nicht an der falschen Methode an, wenn ich nur den einen Test durchführe, und ich hatte mich außerdem auch in DUnit bis zum Ausführen der Methode durch debuggt.

Uwe Raabe 13. Feb 2023 14:43

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Ich habe das nun auch mal ausprobiert und komme zu dem gleichen Ergebnis wie Sebastian: Es funktioniert wie erwartet.

TurboMagic 13. Feb 2023 21:41

AW: DUnit Vererbung/falsche Methode aufgerufen
 
Habe es auch nochmal getestet und ja, ich hab' da beim Ausführen was übersehen.
Jetzt muss ich die Algorithmen fixen, seufz!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz