Test decorator: OneTimeSetup/OneTimeTearDown

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Test decorator: OneTimeSetup/OneTimeTearDown

Beitragvon Maddias » 6. Mai 2019, 11:24 Test decorator: OneTimeSetup/OneTimeTearDown

Liebe Lazarus-Community,

ich gehe meine ersten Schritte mit Lazarus & FreePASCAL und habe mir als erste Aufgabe die Portierung eines DUnit-Projekts von Delphi vorgenommen (siehe auch hier).

In der Online Hilfe von fpcunit fand ich den Hinweis, wie man einen Test Decorator verwendet, um einmalige Setup & TearDown Methoden für alle Testfälle auszuführen (siehe auch hier). Ich habe mich strikt an das Beispiel gehalten und folgende Test Registrierung vorgenommen:
Code: Alles auswählen
 
initialization
  RegisterTestDecorator(TWorkLogTestSetup, TTestdmoEmployee);
end.
 


wobei die Klasse TWorkLogTestSetup folgende Methoden implementiert:
Code: Alles auswählen
 
procedure TWorkLogTestSetup.OneTimeSetup;
begin
  dmoMain := TdmoMain.Create(nil);
  dmoTestHelper := TdmoTestHelper.Create(nil);
  dmoTestHelper.CreateFixture;
end;
 
procedure TWorkLogTestSetup.OneTimeTearDown;
begin
  dmoTestHelper.Free;
  dmoMain.Free;
end;
 


Mein Problem ist das diese Methoden nicht ausgeführt werden sonder stattdessen die Testfälle von TTestdmoEmployee direkt ausgeführt werden, was zur Folge hat das es weder eine TdmoMain noch ein TdmoTestHelper Instanz gibt. Dadurch funktioniert mein Datenbank-Zugriff (TdmoMain) nicht und der Test Helper (TdmoTestHelper) kann kein Fixture generieren.

Was mache ich falsch?

Salut,
Mathias
Maddias
 
Beiträge: 6
Registriert: 29. Apr 2019, 09:28
Wohnort: Randwick, NSW, Australien
OS, Lazarus, FPC: Windows 10 | 
Nach oben

Beitragvon fliegermichl » 6. Mai 2019, 11:29 Re: Test decorator: OneTimeSetup/OneTimeTearDown

Ohne diese Klassen zu kennen mal so geraten:

Sind die genannten Methoden in der Basisklasse evtl. als virtual deklariert?
In dem Fall musst du bei der Delarationb in der ableitenden Klasse "override" hinter die Methodebdefinition schreiben.

Gruß
Michael
fliegermichl
Lazarusforum e. V.
 
Beiträge: 349
Registriert: 9. Jun 2011, 09:42

Beitragvon Maddias » 6. Mai 2019, 11:43 Re: Test decorator: OneTimeSetup/OneTimeTearDown

Hallo Michael,

recht herzlichen Dank für Deine flotte Antwort.

Ja die Methoden TWorkLogTestSetup.OneTimeSetup & TWorkLogTestSetup.OneTimeTearDown sind als override deklariert. Gerade so wie im Beispiel hier gezeigt. Der TGuiTestRunner zeigt auch All Tests & TTestdmoEmployee an. Aber die einmaligen Setup & TearDown Methoden von TWorkLogTestSetup werden nicht ausgeführt. Woran liegt das?

download/file.php?mode=view&id=4842

Salut,
Mathias
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Maddias
 
Beiträge: 6
Registriert: 29. Apr 2019, 09:28
Wohnort: Randwick, NSW, Australien
OS, Lazarus, FPC: Windows 10 | 
Nach oben

Beitragvon m.fuchs » 6. Mai 2019, 14:39 Re: Test decorator: OneTimeSetup/OneTimeTearDown

Seltsam, also bei meinen Tests funktioniert es. Kannst du mal die komplette Unit deines Testcases posten?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
Lazarusforum e. V.
 
Beiträge: 2082
Registriert: 22. Sep 2006, 19:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (Lazarus 2.0, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Maddias » 7. Mai 2019, 04:50 Re: Test decorator: OneTimeSetup/OneTimeTearDown

Hallo m.fuchs,

recht herzlichen Dank für Deine Antwort. Ich habe meinen bisherigen Lazarus Source Code in ein ZIP ARchiv gepackt und dann auf meinen Web Server hochgeladen. Du Kannst es von hier herunterladen.

Im Endausbau habe ich mehrere Datenmodule, die ich über den Test Decorator mit dem Framework Registrieren möchte. Für den Moment reicht mir eine Testklasse. Später braucht es dann die Übersetzung für folgenden Delphi DUnit Code:

Code: Alles auswählen
 
initialization
  RegisterTest(
    TWorkLogTestSetup.Create(
      TTestSuite.Create('WorkLog Client/Server Tests',
        [TTestdmoEmployee.Suite,
         TTestdmoLookup.Suite,
         TTestfraEmployee.Suite,
         TTestfraLookup.Suite])));
end.
 

Testfälle für Formulare & Frames (z.B. TTestfraEmployee) scheinen ja nicht zum Funktionsumfang von fpcunit zu gehören. Die kann man sich "wegdenken". Funktioniert auch in Delphi nicht wirklich. Ich hatte sie bei meinem Vortrag einfach mal erwähnt aber auch gleich ihre Limitationen genannt.

Recht herzlichen Dank für eine kurze Antwort im Voraus.

Salut,
Mathias
Maddias
 
Beiträge: 6
Registriert: 29. Apr 2019, 09:28
Wohnort: Randwick, NSW, Australien
OS, Lazarus, FPC: Windows 10 | 
Nach oben

Beitragvon m.fuchs » 7. Mai 2019, 08:25 Re: Test decorator: OneTimeSetup/OneTimeTearDown

Hab das gerade mal bei mir gestartet und Breakpoints in TWorkLogTestSetup.OneTimeSetup; und TWorkLogTestSetup.OneTimeTearDown gesetzt. Sie werden beide so ausgeführt wie es sein soll.
Ich habe jetzt erstmal den Quellcode in den ganzen Methoden und Testmethoden auskommentiert, da mir auch der passende Datenbanktreiber fehlt. Aber an den OneTime-Methoden liegt es erstmal nicht.
Ich schaue es mir nachher nochmal genauer an.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
Lazarusforum e. V.
 
Beiträge: 2082
Registriert: 22. Sep 2006, 19:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (Lazarus 2.0, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried