From oeste.sebastian at googlemail.com Wed Apr 4 01:36:32 2012 From: oeste.sebastian at googlemail.com (Sebastian Oeste) Date: Wed, 4 Apr 2012 10:36:32 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 102, Eintrag 1 In-Reply-To: References: Message-ID: Hallo, Vielen Dank, erstmal für die Antworten. Da du deine Funktion read_from_file nennst, würde ich annehmen, dass du lesen willst. Tatsächlich öffnest du aber zum schreiben. Ich würde dir auch empfehlen, auf Bareword-Filehandle (OUT) zu verzichten. Damit handelst du dir Probleme ein, die nicht sein müssen. Bspw. sind Bareword-Filehandle globale Variablen, du kannst sie also nicht in rekursiven Funktionen einsetzen. Besser wären lexikalische Filehandle: open my $fh, "<", $filename or die Da hast du natürlich recht. Das mit dem zum schreiben öffnen war ein Tipp-Fehler und das mit dem Bareword wusste ich noch nicht. Aber ich werds mir merken. Die erste von dir aufgezeigte möglichkeit finde ich nicht so gut ich wollte ja den direkten Zugriff auf das Dateisystem vermeiden. Der Vergleich mit einer bekannten, funktionierenden Funktion ist eine möglichkeit. Ich hab fürs erste ein Filehandle übergeben und im Test das _DATA_ Filehandle genommen und dort raus gelesen. > Du kannst das File auch mit IO::File lesen. Zum Testen tauschst Du dann das echte IO::File gegen ein gemocktes aus. Entweder Du nimmst die Mock Module dafür oder Du schreibst ein IO::File > selbst, speziell für diesen Test. Da muss ich mir mal die perldoc von IO::File angucken das hab ich noch nicht versucht. Aber das zu Mocken gefällt mir ganz gut. Mal schauen ob ich das hinbekomme. In weiterer Recherche bin ich auf die Module Test::Output und Test::Output::Tie gestoßen. Test::Output ist kein Problem da kann ich was mit der Doku anfangen, ist halt leider nur für die Standard-Handles. Test::Output::Tie ??? Keine Ahnung, wie soll ich das nutzten ? Kennt das jemand? Habe das so verstanden das man damit auch andere Handles Testen kann. Aber wie? Wäre um ein aussagekräftiges Beispiel sehr Dankbar. Gruß, Basti > > Message: 1 > Date: Sat, 31 Mar 2012 23:13:24 +0200 > From: Sebastian Oeste > To: dresden-pm at pm.org > Subject: [Dresden-pm] Filehandles testen > Message-ID: > > > Content-Type: text/plain; charset="iso-8859-1" > > Hallo, > > ich beschäftige mich grade unteranderem mit TDD unter Perl, kein Problem an > sich Perl lässt sich sehr gut testen. > Leider weiß ich nicht so richtig wie ich Zugriffe auf eine Datei Testen > soll, ich will ja nicht jedes mal aufs Filessystem. > Wenn ich jetzt sowas hab: > sub read_from_file > { > my @insert_line = (); > open(OUT, ">>", $file) or die qq/any errormessage/; > while () > { > push(@insert_line, $_); > } > close(OUT); > return \@insert_line; > } > > Habt ihr ne Idee wie ich sowas Testen kann würde mich brennend > interessieren. > Wenn ich aber danach google, finde ich leider nur Artikel zu den Dateitest > Operatoren oden dem DATA Filehandle. > > Danke im Vorraus > > Gruß, > Basti > -------------- nächster Teil -------------- > Ein Dateianhang mit HTML-Daten wurde abgetrennt... > URL: < > http://mail.pm.org/pipermail/dresden-pm/attachments/20120331/9d4b6667/attachment-0001.html > > > > ------------------------------ > > Message: 2 > Date: Sun, 01 Apr 2012 08:24:16 +0200 > From: "Steffen Winkler" > To: dresden-pm at pm.org > Subject: Re: [Dresden-pm] Filehandles testen > Message-ID: <20120401062416.26560 at gmx.net> > Content-Type: text/plain; charset="utf-8" > > Hallo Sebastian, > > Du kannst das File auch mit IO::File lesen. > Zum Testen tauschst Du dann das echte IO::File gegen ein gemocktes aus. > Entweder Du nimmst die Mock Module dafür oder Du schreibst ein IO::File > selbst, speziell für diesen Test. > > ungetestet: > > my $file_handle = IO::File->new($file, '<') or die $!; > my @insert_line = $file_handle->get_lines; > $! and die $!; # es gibt auch Fehler beim Datei lesen > $file_handle->close; # close Fehler gibt es nur beim Schreiben > return \@insert_line; > > --Steffen > > -------- Original-Nachricht -------- > > Datum: Sat, 31 Mar 2012 23:13:24 +0200 > > Von: Sebastian Oeste > > An: dresden-pm at pm.org > > Betreff: [Dresden-pm] Filehandles testen > > > Hallo, > > > > ich beschäftige mich grade unteranderem mit TDD unter Perl, kein Problem > > an > > sich Perl lässt sich sehr gut testen. > > Leider weiß ich nicht so richtig wie ich Zugriffe auf eine Datei Testen > > soll, ich will ja nicht jedes mal aufs Filessystem. > > Wenn ich jetzt sowas hab: > > sub read_from_file > > { > > my @insert_line = (); > > open(OUT, ">>", $file) or die qq/any errormessage/; > > while () > > { > > push(@insert_line, $_); > > } > > close(OUT); > > return \@insert_line; > > } > > > > Habt ihr ne Idee wie ich sowas Testen kann würde mich brennend > > interessieren. > > Wenn ich aber danach google, finde ich leider nur Artikel zu den > Dateitest > > Operatoren oden dem DATA Filehandle. > > > > Danke im Vorraus > > > > Gruß, > > Basti > > -- > NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! > Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a > > > ------------------------------ > > Message: 3 > Date: Sun, 1 Apr 2012 08:37:59 +0200 > From: Maik Hentsche > To: dresden-pm at pm.org > Subject: Re: [Dresden-pm] Filehandles testen > Message-ID: <20120401083759.293ba0e7 at zeus> > Content-Type: text/plain; charset="utf-8" > > Sebastian Oeste wrote: > > > sub read_from_file > > { > > my @insert_line = (); > > open(OUT, ">>", $file) or die qq/any errormessage/; > > while () > > { > > push(@insert_line, $_); > > } > > close(OUT); > > return \@insert_line; > > } > > Da du deine Funktion read_from_file nennst, würde ich annehmen, dass du > lesen willst. Tatsächlich öffnest du aber zum schreiben. Ich würde dir > auch empfehlen, auf Bareword-Filehandle (OUT) zu verzichten. Damit > handelst du dir Probleme ein, die nicht sein müssen. Bspw. sind > Bareword-Filehandle globale Variablen, du kannst sie also nicht in > rekursiven Funktionen einsetzen. Besser wären lexikalische Filehandle: > open my $fh, "<", $filename or die; > > > > Habt ihr ne Idee wie ich sowas Testen kann würde mich brennend > > interessieren. > > Da gibt es mehrere Möglichkeiten. Du könntest z.B. eine Datei anlegen, > deren Inhalt du genau kennst. > > use Test::More; > use MyPackage; > my @expected = ("zeile 1\n", "zeile 2\n"); > my $result = MyPackage::read_from_file('t/file_with_known_content'); > is_deeply($result, \@expected, 'Read_from_file known content'); > > Du könntest auch ein bekannt funktionierendes Filelese-Modul verwenden > und schauen, ob es das selbe liefert wie deine Funktion: > > use Test::More; > use MyPackage; > use File::Slurp 'read_file'; > > my $expected = read_file('t/file_with_unknown_content'); > my $result = MyPackage::read_from_file('t/file_with_unknown_content'); > my $joined = join '', @$result; > > is($joined, $expected, 'Read_from_file slurp'); > > Es kann sein, dass noch andere Testmöglichkeiten sinnvoll sind, je > nachdem, was du testen willst. > > so long > Maik > > -- > Der Verstand ist wie eine Fahrkarte. Sie hat nur Sinn wenn man sie > benutzt. (Ernst R. Hauschka (*1926), deutscher Essayist, > Aphoristiker und Bibliothekar) > -------------- nächster Teil -------------- > Ein Dateianhang mit Binärdaten wurde abgetrennt... > Dateiname : signature.asc > Dateityp : application/pgp-signature > Dateigröße : 190 bytes > Beschreibung: nicht verfügbar > URL : < > http://mail.pm.org/pipermail/dresden-pm/attachments/20120401/6c132f24/attachment-0001.bin > > > > ------------------------------ > > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > > Ende Dresden-pm Nachrichtensammlung, Band 102, Eintrag 1 > ******************************************************** > -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: From steffen.winkler at gmx.net Wed Apr 4 22:23:42 2012 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Thu, 05 Apr 2012 07:23:42 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 102, Eintrag 1 In-Reply-To: References: Message-ID: <20120405052342.319160@gmx.net> Hallo Sebastian, bei Test::Output::Tie steht - module used by Test::Output to tie STDERR and STDOUT - You are probably more interested in reading Test::Output. Alles klar? Der Code wurde nur in ein extra Modul ausgelagert. Du kannst Dir anschauen, wie es funktioniert, nur benutzen sollst Du es nicht direkt. So etwas gibt's oft und steht auch dabei. Bei Path::Class steht auch, dass man Path::Class::File und Path::Class::Dir nicht direkt benutzen muss, sondern indirekt über "file" und "dir", aber man kann. Das ist die moderne Art Files und Verzeichnisse zu bearbeiten, solltest Du Dir mal anschauen. Vor allen Dingen funktioniert da slurp, was bei File::Slurp kaputt ist. Es gibt immer wieder etwas neues, in der Verwendung einfacheres. Manchmal geht es schief, wie bei File::Slurp, bleibt aber im CPAN. Das ist aber nur für die schwer, welche mit niemandem reden. --Steffen -- NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a From oeste.sebastian at googlemail.com Wed Apr 11 01:09:06 2012 From: oeste.sebastian at googlemail.com (Sebastian Oeste) Date: Wed, 11 Apr 2012 10:09:06 +0200 Subject: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 102, Eintrag 2 In-Reply-To: References: Message-ID: Hallo Steffen, ok, das macht Sinn. Da hatte ich nicht richtig gelesen aber war auch verwirrt da in einem Buch von mir direkt Test::Output::Tie zum Testen beliebiger Filehandles ausgeschrieben war. Und vielen Dank für den Tipp mit Path::Class das werde ich mir auf jedenfall mal genauer angucken. Gruß, Sebastian Am 5. April 2012 21:00 schrieb : > Um E-Mails an die Liste Dresden-pm zu schicken, nutzen Sie bitte die > Adresse > > dresden-pm at pm.org > > Um sich via Web von der Liste zu entfernen oder draufzusetzen: > > http://mail.pm.org/mailman/listinfo/dresden-pm > > oder, via E-Mail, schicken Sie eine E-Mail mit dem Wort 'help' in > Subject/Betreff oder im Text an > > dresden-pm-request at pm.org > > Sie koennen den Listenverwalter dieser Liste unter der Adresse > > dresden-pm-owner at pm.org > > erreichen > > Wenn Sie antworten, bitte editieren Sie die Subject/Betreff auf einen > sinnvollen Inhalt der spezifischer ist als "Re: Contents of Dresden-pm > digest..." > > > Meldungen des Tages: > > 1. Re: Dresden-pm Nachrichtensammlung, Band 102, Eintrag 1 > (Sebastian Oeste) > 2. Re: Dresden-pm Nachrichtensammlung, Band 102, Eintrag 1 > (Steffen Winkler) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Wed, 4 Apr 2012 10:36:32 +0200 > From: Sebastian Oeste > To: dresden-pm at pm.org > Subject: Re: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 102, > Eintrag 1 > Message-ID: > > > Content-Type: text/plain; charset="iso-8859-1" > > Hallo, > > Vielen Dank, erstmal für die Antworten. > > Da du deine Funktion read_from_file nennst, würde ich annehmen, dass du > > lesen willst. Tatsächlich öffnest du aber zum schreiben. Ich würde dir > > auch empfehlen, auf Bareword-Filehandle (OUT) zu verzichten. Damit > > handelst du dir Probleme ein, die nicht sein müssen. Bspw. sind > > Bareword-Filehandle globale Variablen, du kannst sie also nicht in > > rekursiven Funktionen einsetzen. Besser wären lexikalische Filehandle: > > open my $fh, "<", $filename or die > > > Da hast du natürlich recht. Das mit dem zum schreiben öffnen war ein > Tipp-Fehler und das mit dem Bareword wusste ich noch nicht. > Aber ich werds mir merken. > Die erste von dir aufgezeigte möglichkeit finde ich nicht so gut ich wollte > ja den direkten Zugriff auf das Dateisystem vermeiden. > Der Vergleich mit einer bekannten, funktionierenden Funktion ist eine > möglichkeit. > > Ich hab fürs erste ein Filehandle übergeben und im Test das _DATA_ > Filehandle genommen und dort raus gelesen. > > > > > Du kannst das File auch mit IO::File lesen. > > Zum Testen tauschst Du dann das echte IO::File gegen ein gemocktes aus. > > Entweder Du nimmst die Mock Module dafür oder Du schreibst ein IO::File > > selbst, speziell für diesen Test. > > > Da muss ich mir mal die perldoc von IO::File angucken das hab ich noch > nicht versucht. Aber das zu Mocken gefällt mir ganz gut. > Mal schauen ob ich das hinbekomme. > > In weiterer Recherche bin ich auf die Module Test::Output und > Test::Output::Tie gestoßen. > Test::Output ist kein Problem da kann ich was mit der Doku anfangen, ist > halt leider nur für die Standard-Handles. > Test::Output::Tie ??? Keine Ahnung, wie soll ich das nutzten ? Kennt das > jemand? > Habe das so verstanden das man damit auch andere Handles Testen kann. Aber > wie? > Wäre um ein aussagekräftiges Beispiel sehr Dankbar. > > Gruß, > Basti > > > > > > > Message: 1 > > Date: Sat, 31 Mar 2012 23:13:24 +0200 > > From: Sebastian Oeste > > To: dresden-pm at pm.org > > Subject: [Dresden-pm] Filehandles testen > > Message-ID: > > vc+UY6A at mail.gmail.com > > > > > Content-Type: text/plain; charset="iso-8859-1" > > > > Hallo, > > > > ich beschäftige mich grade unteranderem mit TDD unter Perl, kein Problem > an > > sich Perl lässt sich sehr gut testen. > > Leider weiß ich nicht so richtig wie ich Zugriffe auf eine Datei Testen > > soll, ich will ja nicht jedes mal aufs Filessystem. > > Wenn ich jetzt sowas hab: > > sub read_from_file > > { > > my @insert_line = (); > > open(OUT, ">>", $file) or die qq/any errormessage/; > > while () > > { > > push(@insert_line, $_); > > } > > close(OUT); > > return \@insert_line; > > } > > > > Habt ihr ne Idee wie ich sowas Testen kann würde mich brennend > > interessieren. > > Wenn ich aber danach google, finde ich leider nur Artikel zu den > Dateitest > > Operatoren oden dem DATA Filehandle. > > > > Danke im Vorraus > > > > Gruß, > > Basti > > -------------- nächster Teil -------------- > > Ein Dateianhang mit HTML-Daten wurde abgetrennt... > > URL: < > > > http://mail.pm.org/pipermail/dresden-pm/attachments/20120331/9d4b6667/attachment-0001.html > > > > > > > ------------------------------ > > > > Message: 2 > > Date: Sun, 01 Apr 2012 08:24:16 +0200 > > From: "Steffen Winkler" > > To: dresden-pm at pm.org > > Subject: Re: [Dresden-pm] Filehandles testen > > Message-ID: <20120401062416.26560 at gmx.net> > > Content-Type: text/plain; charset="utf-8" > > > > Hallo Sebastian, > > > > Du kannst das File auch mit IO::File lesen. > > Zum Testen tauschst Du dann das echte IO::File gegen ein gemocktes aus. > > Entweder Du nimmst die Mock Module dafür oder Du schreibst ein IO::File > > selbst, speziell für diesen Test. > > > > ungetestet: > > > > my $file_handle = IO::File->new($file, '<') or die $!; > > my @insert_line = $file_handle->get_lines; > > $! and die $!; # es gibt auch Fehler beim Datei lesen > > $file_handle->close; # close Fehler gibt es nur beim Schreiben > > return \@insert_line; > > > > --Steffen > > > > -------- Original-Nachricht -------- > > > Datum: Sat, 31 Mar 2012 23:13:24 +0200 > > > Von: Sebastian Oeste > > > An: dresden-pm at pm.org > > > Betreff: [Dresden-pm] Filehandles testen > > > > > Hallo, > > > > > > ich beschäftige mich grade unteranderem mit TDD unter Perl, kein > Problem > > > an > > > sich Perl lässt sich sehr gut testen. > > > Leider weiß ich nicht so richtig wie ich Zugriffe auf eine Datei > Testen > > > soll, ich will ja nicht jedes mal aufs Filessystem. > > > Wenn ich jetzt sowas hab: > > > sub read_from_file > > > { > > > my @insert_line = (); > > > open(OUT, ">>", $file) or die qq/any errormessage/; > > > while () > > > { > > > push(@insert_line, $_); > > > } > > > close(OUT); > > > return \@insert_line; > > > } > > > > > > Habt ihr ne Idee wie ich sowas Testen kann würde mich brennend > > > interessieren. > > > Wenn ich aber danach google, finde ich leider nur Artikel zu den > > Dateitest > > > Operatoren oden dem DATA Filehandle. > > > > > > Danke im Vorraus > > > > > > Gruß, > > > Basti > > > > -- > > NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! > > Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a > > > > > > ------------------------------ > > > > Message: 3 > > Date: Sun, 1 Apr 2012 08:37:59 +0200 > > From: Maik Hentsche > > To: dresden-pm at pm.org > > Subject: Re: [Dresden-pm] Filehandles testen > > Message-ID: <20120401083759.293ba0e7 at zeus> > > Content-Type: text/plain; charset="utf-8" > > > > Sebastian Oeste wrote: > > > > > sub read_from_file > > > { > > > my @insert_line = (); > > > open(OUT, ">>", $file) or die qq/any errormessage/; > > > while () > > > { > > > push(@insert_line, $_); > > > } > > > close(OUT); > > > return \@insert_line; > > > } > > > > Da du deine Funktion read_from_file nennst, würde ich annehmen, dass du > > lesen willst. Tatsächlich öffnest du aber zum schreiben. Ich würde dir > > auch empfehlen, auf Bareword-Filehandle (OUT) zu verzichten. Damit > > handelst du dir Probleme ein, die nicht sein müssen. Bspw. sind > > Bareword-Filehandle globale Variablen, du kannst sie also nicht in > > rekursiven Funktionen einsetzen. Besser wären lexikalische Filehandle: > > open my $fh, "<", $filename or die; > > > > > > > Habt ihr ne Idee wie ich sowas Testen kann würde mich brennend > > > interessieren. > > > > Da gibt es mehrere Möglichkeiten. Du könntest z.B. eine Datei anlegen, > > deren Inhalt du genau kennst. > > > > use Test::More; > > use MyPackage; > > my @expected = ("zeile 1\n", "zeile 2\n"); > > my $result = MyPackage::read_from_file('t/file_with_known_content'); > > is_deeply($result, \@expected, 'Read_from_file known content'); > > > > Du könntest auch ein bekannt funktionierendes Filelese-Modul verwenden > > und schauen, ob es das selbe liefert wie deine Funktion: > > > > use Test::More; > > use MyPackage; > > use File::Slurp 'read_file'; > > > > my $expected = read_file('t/file_with_unknown_content'); > > my $result = MyPackage::read_from_file('t/file_with_unknown_content'); > > my $joined = join '', @$result; > > > > is($joined, $expected, 'Read_from_file slurp'); > > > > Es kann sein, dass noch andere Testmöglichkeiten sinnvoll sind, je > > nachdem, was du testen willst. > > > > so long > > Maik > > > > -- > > Der Verstand ist wie eine Fahrkarte. Sie hat nur Sinn wenn man sie > > benutzt. (Ernst R. Hauschka (*1926), deutscher Essayist, > > Aphoristiker und Bibliothekar) > > -------------- nächster Teil -------------- > > Ein Dateianhang mit Binärdaten wurde abgetrennt... > > Dateiname : signature.asc > > Dateityp : application/pgp-signature > > Dateigröße : 190 bytes > > Beschreibung: nicht verfügbar > > URL : < > > > http://mail.pm.org/pipermail/dresden-pm/attachments/20120401/6c132f24/attachment-0001.bin > > > > > > > ------------------------------ > > > > _______________________________________________ > > Dresden-pm mailing list > > Dresden-pm at pm.org > > http://mail.pm.org/mailman/listinfo/dresden-pm > > > > Ende Dresden-pm Nachrichtensammlung, Band 102, Eintrag 1 > > ******************************************************** > > > -------------- nächster Teil -------------- > Ein Dateianhang mit HTML-Daten wurde abgetrennt... > URL: < > http://mail.pm.org/pipermail/dresden-pm/attachments/20120404/111fbcb8/attachment-0001.html > > > > ------------------------------ > > Message: 2 > Date: Thu, 05 Apr 2012 07:23:42 +0200 > From: "Steffen Winkler" > To: dresden-pm at pm.org > Subject: Re: [Dresden-pm] Dresden-pm Nachrichtensammlung, Band 102, > Eintrag 1 > Message-ID: <20120405052342.319160 at gmx.net> > Content-Type: text/plain; charset="utf-8" > > Hallo Sebastian, > > bei Test::Output::Tie steht > - module used by Test::Output to tie STDERR and STDOUT > - You are probably more interested in reading Test::Output. > > Alles klar? Der Code wurde nur in ein extra Modul ausgelagert. Du kannst > Dir anschauen, wie es funktioniert, nur benutzen sollst Du es nicht direkt. > > So etwas gibt's oft und steht auch dabei. > > Bei Path::Class steht auch, dass man Path::Class::File und > Path::Class::Dir nicht direkt benutzen muss, sondern indirekt über "file" > und "dir", aber man kann. Das ist die moderne Art Files und Verzeichnisse > zu bearbeiten, solltest Du Dir mal anschauen. Vor allen Dingen funktioniert > da slurp, was bei File::Slurp kaputt ist. > > Es gibt immer wieder etwas neues, in der Verwendung einfacheres. Manchmal > geht es schief, wie bei File::Slurp, bleibt aber im CPAN. Das ist aber nur > für die schwer, welche mit niemandem reden. > > --Steffen > > -- > NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! > Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a > > > ------------------------------ > > _______________________________________________ > Dresden-pm mailing list > Dresden-pm at pm.org > http://mail.pm.org/mailman/listinfo/dresden-pm > > Ende Dresden-pm Nachrichtensammlung, Band 102, Eintrag 2 > ******************************************************** > -------------- nächster Teil -------------- Ein Dateianhang mit HTML-Daten wurde abgetrennt... URL: