From oeste.sebastian at googlemail.com Sat Mar 31 14:13:24 2012 From: oeste.sebastian at googlemail.com (Sebastian Oeste) Date: Sat, 31 Mar 2012 23:13:24 +0200 Subject: [Dresden-pm] Filehandles testen Message-ID: 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: From steffen.winkler at gmx.net Sat Mar 31 23:24:16 2012 From: steffen.winkler at gmx.net (Steffen Winkler) Date: Sun, 01 Apr 2012 08:24:16 +0200 Subject: [Dresden-pm] Filehandles testen In-Reply-To: References: Message-ID: <20120401062416.26560@gmx.net> 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 From maik at mm-double.de Sat Mar 31 23:37:59 2012 From: maik at mm-double.de (Maik Hentsche) Date: Sun, 1 Apr 2012 08:37:59 +0200 Subject: [Dresden-pm] Filehandles testen In-Reply-To: References: Message-ID: <20120401083759.293ba0e7@zeus> 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 :