Bitte Hilfe bei Unit-Testing

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Bitte Hilfe bei Unit-Testing

Beitragvon Marsmännchen » 5. Aug 2017, 19:30 Bitte Hilfe bei Unit-Testing

Hi,

ich quäle mich grade damit ab, meine Unit-Tests zum Laufen zu kriegen (ich benutze FPCUnit, da gibt es ja wohl auch noch ein anderes Framework). Ich habe noch nicht viel Erfahrung mit diesem Kram, aber habe zumindest schon simple Tests zum Laufen bekommen. Jetzt aber beiße ich auf Granit:
Ich möchte, dass meine Klasse Exceptions wirft, wenn ihr fehlerhafte Daten zugewiesen werden (damit will ich sie von allem anderen entkoppeln: valide Daten werden geschluckt, fehlerhafte Daten werden zurückgewiesen und gemeldet).
Habe das auch so implementiert und wollte es jetzt automatisch testen lassen. Aber ich kriege die Testumgebung nicht richtig hin. Die Exception wird korrekt geworfen (Bild1), aber in der Testumgebung nicht richtig abgefangen, eigentlich müsste das Programm doch weiterlaufen, oder habe ich da einen Denkfehler? Wenn ich auf Fortfahren klicke, dann kriege ich ein SIGSEV um die Ohren gehaun (Bild2). Ich möchte eigentlich nur, dass auch in der Testumgebung eine fehlerhafte Wertzuweisung an mein Objekt eine Exception auslöst, diese aber abgefangen wird (Meldung an den User) und das Programm dann weiterläuft.

Ich habe auch schon mit AssertException rumprobiert, aber das funktioniert nicht, weil ich keine Methode testen will (die diese Assertion verlangt), sondern einen Ausdruck (die Zuweisung eines leeren Strings). Nun hab ich keinen Plan, was ich da machen muss und hoffe, jemand hilft mir weiter. Das Projekt hänge ich an.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ich mag Pascal...
Marsmännchen
 
Beiträge: 291
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4 | 
CPU-Target: 64bit
Nach oben

Beitragvon Mathias » 5. Aug 2017, 19:54 Re: Bitte Hilfe bei Unit-Testing

Wolltest du dies haben ?

Es macht einen Unterschied, ob du das Programm in der IDE oder direkt ohne IDE startest.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3194
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Marsmännchen » 5. Aug 2017, 21:17 Re: Bitte Hilfe bei Unit-Testing

Hi,

das bringt mich auf jeden Fall schon mal einen Schritt weiter. Ich habe die Tests bisher immer aus der IDE gestartet (was anderes wäre mir gar nicht in den Sinn gekommen). Allerdings muss ich jetzt irgendwie rausfinden, warum der Test wegen einer Access Violation fehlschlägt. Scheint noch ein steiniger Weg zu sein, aber man lernt ja daran.

Auf jeden Fall Danke!
Ich mag Pascal...
Marsmännchen
 
Beiträge: 291
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4 | 
CPU-Target: 64bit
Nach oben

Beitragvon wp_xyz » 5. Aug 2017, 22:22 Re: Bitte Hilfe bei Unit-Testing

Schau dir fpspreadsheet an, da gibt es im Ordner tests eine Unmenge von Unit-Tests (https://sourceforge.net/p/lazarus-ccr/s ... eet/tests/). Oder, weil das für den Einstieg wahrscheinlich zu umfangreich ist, schau dir mal die Unit-Tests an, die gerade für dEXIF im github von af0815 entstehen (https://github.com/afriess/dexif/tree/wip_samples/tests).
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 6. Aug 2017, 15:54 Re: Bitte Hilfe bei Unit-Testing

Ich habe die Tests bisher immer aus der IDE gestartet (was anderes wäre mir gar nicht in den Sinn gekommen).

Gucke mal folgendes Beispiel an:
Code: Alles auswählen
var
  s: string;
  i: longint;
begin
  s := 'abc';
  try
    i := StrToInt(s);
  except
    On E: EConvertError do ShowMessage('Fehler');
  end;
end;

Ohne IDE, kommt wie erwarte direkt die Fehlermeldung.
Mit der IDE kommt zuerst eine Debuggernachricht, bevor das ShowMessage kommt.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3194
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Marsmännchen » 6. Aug 2017, 16:13 Re: Bitte Hilfe bei Unit-Testing

Danke für die ganzen Hinweise. Ich habe es jetzt in den Griff bekommen. Auch die Sache mit dem Starten innerhalb oder außerhalb der IDE.

Die Access-Violation, die mir immer meinen Test zerschossen hat, habe ich auch gefunden, ich kapiers nur nicht:
Ich benutze die Setup-Routine des Testframeworks, um mir Mockobjekte zu schaffen, mit denen ich dann in den Tests arbeite
Code: Alles auswählen
procedure TMFK3Test.SetUp;
var
  i: Integer;
 
begin
  Einmalliste := TEinmalListe.Create(True);
  Einmalliste.Assign(MockListeBuchungEinmalig);
 
end;
 
 


wie ich es gelernt habe, will ich dann zum Schluss aufräumen, aber dabei fliegt mir der Test um die Ohren. Es gibt eine Access-Violation, weil offenkundig die Liste der Testobjekte schon vorher von irgendwas gelöscht wird??? Warum das so ist, weiß ich aber nicht. Oder muss man eine TFPGObjectList nicht freigeben???
Code: Alles auswählen
procedure TMFK3Test.TearDown;
begin
  //Einmalliste.Free;        //-> Wenn ich den entkommentiere, dann knallts hier!
  //Einmalliste := nil;
end;       


Projekt ist vorsichtshalber nochmal beigefügt. Hat jemand einen Tipp?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ich mag Pascal...
Marsmännchen
 
Beiträge: 291
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4 | 
CPU-Target: 64bit
Nach oben

Beitragvon Marsmännchen » 6. Aug 2017, 16:27 Re: Bitte Hilfe bei Unit-Testing

wp_xyz hat geschrieben:...schau dir mal die Unit-Tests an, die gerade für dEXIF im github von af0815 entstehen (https://github.com/afriess/dexif/tree/wip_samples/tests).

Der Link führt leider ins Leere bei mir. Gituhb behauptet, den gibts nicht...

In den Links auf sourceforge sind wirklich Unmengen von Tests. Ich habe jetzt für meine Testcases (Testen auf Exceptions) dort erstmal nix Passendes gefunden. ich vermute, dass ich mit ExpectException was anfangen könnte, aber dazu finde ich keine Dokumentation. Auf sourceforge wird auch auf eine FPC Unit Dokumentation verwiesen, die ich aber nicht finde. Auf der FPC-Unit-Homepage wird auf JUnit verwiesen (aber ich weiß nicht, wie ich die @Annotationen aus Java auf Object-Pascal übertragen sollte) und die weiterführenden Links im FPC-Unit-Wiki sind teilweise auch nicht mehr funktionsfähig. Die, die noch funktionieren führen zu Einführungstutorials, aber leider nicht in die Tiefe.
Ich mag Pascal...
Marsmännchen
 
Beiträge: 291
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4 | 
CPU-Target: 64bit
Nach oben

Beitragvon m.fuchs » 6. Aug 2017, 21:21 Re: Bitte Hilfe bei Unit-Testing

Marsmännchen hat geschrieben:wie ich es gelernt habe, will ich dann zum Schluss aufräumen, aber dabei fliegt mir der Test um die Ohren. Es gibt eine Access-Violation, weil offenkundig die Liste der Testobjekte schon vorher von irgendwas gelöscht wird??? Warum das so ist, weiß ich aber nicht. Oder muss man eine TFPGObjectList nicht freigeben???


Naja, das wird daran liegen dass du echt viel Murks machst. In deiner Funktion MockListeBuchungEinmalig erstellst du ein Buchungsobjekt, änderst es fünfmal und fügst es fünfmal der Liste zurück. Wenn deine Liste dann aufgeräumt wird, löscht sie das Objekt einmal, und versucht es dann viermal noch einmal zu löschen. Weil ja insgesamt fünf Referenzen auf dieses eine Objekt existieren. Du möchtest in deinem Mockup sicherlich fünf eigenständige Objekte erzeugen.

Abgesehen davon sind auch noch echt viele unschöne Codezeilen da drin, da sollte nochmal aufgeräumt werden.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1676
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Marsmännchen » 6. Aug 2017, 21:48 Re: Bitte Hilfe bei Unit-Testing

autsch... aber danke. Ich mach mich ans Korrigieren.
Ich mag Pascal...
Marsmännchen
 
Beiträge: 291
Registriert: 4. Mai 2014, 20:32
Wohnort: Berlin
OS, Lazarus, FPC: Ubuntu 16.04, FPC 3.0.2, Lazarus 1.6.4 | 
CPU-Target: 64bit
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried