Unit Tests/Rueckgabewert Funktion bei Exception

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Unit Tests/Rueckgabewert Funktion bei Exception

Beitrag von Eclipticon »

Hi,

bei dem am Treffen vorgestellten Beispielen zu Unit Tests war auch ein Test enthalten, bei dem der Funktionsaufruf eine Exception ausloesen sollte. In weiterer Folge wurde in try ... except mit AssertEquals geprueft, ob der Rueckgabewert der Funktion auch 0 ist. (m.schnell, bist du einverstanden, wenn ich das Beispiel aus calculationservicetests hier poste?)

Hierzu zwei Fragen:

* Ist der Rueckgabewert einer Funktion ueberhaupt definiert, wenn sie eine unbehandelte Exception ausloest?

* Welchen Sinn macht es, diesen Wert zu pruefen?

Danke :-)

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2825
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Unit Tests/Rueckgabewert Funktion bei Exception

Beitrag von m.fuchs »

Eclipticon hat geschrieben:(m.schnell, bist du einverstanden, wenn ich das Beispiel aus calculationservicetests hier poste?)
Ich nehme mal an, dass du mich meinst: ja, das ist kein Problem. Ist ja ein Beispiel.
Eclipticon hat geschrieben:* Ist der Rueckgabewert einer Funktion ueberhaupt definiert, wenn sie eine unbehandelte Exception ausloest?
Der Rückgabewert ist durchaus definiert, man kann ihn ja jederzeit in die Result-Variable schreiben. ABER: der Rückgabewert wird nirgends zugewiesen, weil da ja schon die Exception vorher auftaucht. Woraus folgt...
Eclipticon hat geschrieben:* Welchen Sinn macht es, diesen Wert zu pruefen?
...eigentlich ist das sinnfrei. Interessant wäre so eine Prüfung höchstens außerhalb des except-Blocks, um auch den Fall abzufangen dass keine Exception geworfen wurde. Andererseits wird dieser Fehlerfall ja auch schon durch das

Code: Alles auswählen

Fail('No exception raised.');
abgedeckt. Von daher, die Prüfung auf 0 kann raus.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Unit Tests/Rueckgabewert Funktion bei Exception

Beitrag von Eclipticon »

Ja, ich mein Dich ... sorry, offenbar sollte ich um diese Uhrzeit keine Postings mehr schreiben, kommt nur Bloedsinn dabei raus.

Hier noch das betreffende Stueck Code ...

Code: Alles auswählen

procedure TCalculationServiceTests.ExceptionOnNegativeKapitalTest;
var
  FunctionResult: Currency = 0;
begin
  try
    FunctionResult := Service.BerechneZinsen(-1, 3.4, 5);
    Fail('No exception raised.');
  except
    on e:ECalculate do begin
      Assert(e.ExceptionType = cetKapitalNegativ);
      AssertEquals(0, FunctionResult); // Die Zeile hier war gemeint
    end else
      Fail('Wrong exception raised.');
  end;
end;
 
... und danke!

Antworten