[Dresden-pm] Frage zum Testen

Hans-Dietrich Kirmse hd.kirmse at gmx.de
Fr Mai 25 23:31:39 PDT 2012


Hallo Steffen,

herzlichen Dank für deine Antwort.

Ich werde mit $! und $? noch weiter herumexperimentieren. Wenn sich der exit-code damit so setzen läßt, wie gedacht (danach sieht es aus), dann werde ich auf diese Variante umstellen. Wenn nicht, dann wird es bei der Variante mit dem direkten Aufruf von exit bleiben. Ob ich nun die Fehlervarianten in die Tests mit reinbringe, sehe ich eher als unproblematisch an.

Wegen der Tatsache, ob denn unbedingt dieser Exit-code gebraucht wird: ich bin leider nur Laie und muss einfach den Experten Glauben schenken. Es wurde mir so begründet, dass die Scripte in Hintergrund aufgerufen werden und damit zumindest nicht in jedem Fall die Rückgabe ausgewertet werden kann - der Exit-Code aber schon.

Nochmals meinen Dank.

Viele Grüße
Hans-Dietrich
  

-------- Original-Nachricht --------
> Datum: Wed, 23 May 2012 20:52:43 +0100
> Von: Steffen Schwigon <ss5 at renormalist.net>
> An: dresden-pm at pm.org
> Betreff: Re: [Dresden-pm] Frage zum Testen

> Hans-Dietrich Kirmse <hd.kirmse at gmx.de> writes:
> > Für ein Schulserver-Projekt habe ich ein paar Scripte zur User- und
> > Rechnerverwaltung erstellt. Diese werden über ein Webinterface
> > (erstellt unter Verwendung eines PHP-Frameworks) aufgerufen. Ich wurde
> > schon mehrfach angemahnt, die Scripte so zu erstellen, dass die einen
> > auswertbaren Errorcode zurückliefern. Ich habe deshalb begonnen, alle
> > Scripte zu überarbeiten und konsequent jedes "die" zu ersetzen.
> 
> Wodurch hast Du das "die" ersetzt, durch Dein unten besagtes "exit"?
> 
> Weil prinzipiell ist "die" öfter die richtigere Variante.
> 
> Es geht im Program mit eval{} abzufangen oder macht anderenfalls ein
> exit(). Die exit-Codes kannst Du mit $? und $! beeinflussen.
> 
> Ein direktes exit() lässt sich nicht abfangen, da kann keiner
> Errorhandling drumrum schreiben.
> 
> Entweder direkt selber oder implizit mit einem der Exception-Module von
> CPAN.
> 
> 
> > Um gleichzeitig die Hinweise aus "Perl Best Practices" umzusetzen,
> > habe ich eine Routine "do_exit" erstellt, die einerseits einen
> > Errorcode zurückliefert und andererseits gut gehändelt werden kann, um
> > verständliche Fehlermeldungen zu bringen.
> >
> >
> http://dev.delixs.de/wsvn/delixs/delixs-scripts/trunk/share/perl5/Delixs/Error.pm 
> 
> Das ganze in eine Funktion zu packen ist ok, aber ich empfehle, doch
> wieder "die" am Ende zu verwenden, und die Funktion entsprechend anders
> zu nennen, "do_error()" o.s.ä.
> 
> Du kannst "perldoc -f die" und "man perlvar" zu $! und $? lesen, damit
> geht eine Menge.
> 
> 
> Ich hab das nur mal zum Demonstrieren in
> 
>   http://pastie.org/3957135
> 
> exerziert, aber ich bin nicht sicher, ob das Setzen von $? und $! eine
> Gute Sache(tm) ist.
> 
> Wenn Du derart ausführlich Fehler definieren willst, schau mal besser,
> ob eines der Module von CPAN passt, z.B.
> 
>   https://metacpan.org/module/Exception::Class
> 
> Und prüf außerdem, ob Deine Kollegen die wohldefinierten exit-Code
> *wirklich* brauchen. Gibt's denn die vielen wichtigen Zeilen Code schon,
> die Deine exit-Codes auswerten?
> 
> Falls nicht, wirf einfach mit "die" oder Exception::Class nur die
> Fehlerbeschreibung. Das reicht zu 99%.
> 
> Und wenn ja, wie tauscht ihr die Fehlercode-Definition mit dem
> PHP-Programm aus? Oder wie wir in Dresden hier sagen: “Ick gloob da ni
> dranne, wa.” :)
> 
> 
> 
> > Die Fehlermeldungen sehen so aus:
> >
> http://www.erasmus-reinhold-gymnasium.de/delixs/scripte/fehlermeldung.txt
> >
> > Ich möchte gern zu jeder Routine aus den Modulen entsprechende Tests
> > schreiben, aber genau hier ist mein Problem.
> >
> > Ich weiss leider nicht, wie ich diesen zurückgegebenen Errorcode von
> > Perl aus abfragen kann. Auch die Ausgabe der Fehlermeldung würde ich
> > gern testen. Hier sehe ich als einzige Chance, einen Fehler zu
> > provozieren und dabei über eval zu gehen und diese Meldung dann aus $@
> > auszulesen. Geht das auch anders oder ist das der übliche Weg für
> > solche Tests?
> 
> Wenn Du "die" verwendest, kannst Du prinzipiell Dein eval{} und $@
> machen, ja. Mit exit() wird das schwer. Prinzipiell funktioniert das im
> Test genaus wie in meinem obigen Beispiel.
> 
> Schau aber besser nach einem richtigen Testmodul, wie z.B.
> 
>   https://metacpan.org/module/Test::Exception
> 
> 
> Viel Glück. Halt uns auf dem laufenden.
> 
> Kind regards,
> Steffen 
> -- 
> Steffen Schwigon <ss5 at renormalist.net>
> Dresden Perl Mongers <http://dresden-pm.org/>
> _______________________________________________
> Dresden-pm mailing list
> Dresden-pm at pm.org
> http://mail.pm.org/mailman/listinfo/dresden-pm


-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de


Mehr Informationen über die Mailingliste Dresden-pm