Schrift
[thread]10556[/thread]

Perl XS - test.pl wird nicht erzeugt

Leser: 2


<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-10-10 17:44
#100636 #100636
Hallo,

Ich habe gerade das (übersetzte) perlxstut gelesen und ausprobiert. Hat auch anfangs wunderbar geklappt, bis ich bemerkte, dass die Datei test.pl beim Aufruf von h2xs einfach nicht mit erzeugt wird. Alles andere (Changes, Makefile.PL, Mytest.xs...) ist da, nur test.pl nicht. Da kann ich h2xs zigmal neu aufrufen, sie lässt sich einfach nirgends auf meinem Rechner finden.
Perlversion ist 5.8.8, Betriebssystem RHEL 5.
Ich bin für jeden Tipp dankbar, nicht mal bei den Perlmonks habe ich ein ähnliches Problem oder einen Lösungsansatz sichten können. Ich weiss auch nicht sicher, ob test.pl wirklich notwendig ist, aber das Tutorial kann ich ohne nicht durcharbeiten.

Viele Grüße,

Michaela
ptk
 2007-10-10 21:31
#100644 #100644
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
test.pl war früher mal, heute bevorzugt man mehrere Dateien im t-Unterverzeichnis.
MechaTikal
 2007-10-11 10:51
#100653 #100653
User since
2007-10-10
20 Artikel
BenutzerIn
[default_avatar]
Dann stimmt aber das ganze Tutorial nicht. Wenn ich "make test" aufrufe, erhalte ich zwar

Code: (dl )
1
2
3
4
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/New....ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.03 cusr + 0.01 csys = 0.04 CPU)

aber ab dem 2. Beispiel kann ich nicht weitermachen. (Oder bin ich einfach zu doof?)
Jedenfalls steht da ja Folgendes:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
In order to test that our extension works, we now need to look at the file test.pl.  This file is set up to imitate the same kind of
testing structure that Perl itself has. Within the test script, you perform a number of tests to confirm the behavior of the exten-
sion, printing "ok" when the test is correct, "not ok" when it is not. Change the print statement in the BEGIN block to print
"1..4", and add the following code to the end of the file:

print &Mytest::is_even(0) == 1 ? "ok 2" : "not ok 2", "\n";
print &Mytest::is_even(1) == 0 ? "ok 3" : "not ok 3", "\n";
print &Mytest::is_even(2) == 1 ? "ok 4" : "not ok 4", "\n";

We will be calling the test script through the command ""make test"". You should see output that looks something like this:

% make test
PERL_DL_NONLAZY=1 /opt/perl5.004/bin/perl (lots of -I arguments) test.pl
1..4
ok 1
ok 2
ok 3
ok 4
%

Habe ich eingetippert (in Mytest.t statt Mytest.test), macht aber beim Ausführen lauter Fehlermeldungen.
Ich probiere das jetzt nochmal, aber es wurmt mich schon, dass die manpage veraltet scheint.

EDIT: So, nochmal das Ganze. Mein Code sieht so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use Test::More tests => 1..4;
BEGIN { use_ok('Mytest') };

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

print &Mytest::is_even(0) == 1 ? "ok 2" : "not ok 2", "\n";
print &Mytest::is_even(1) == 0 ? "ok 3" : "not ok 3", "\n";
print &Mytest::is_even(2) == 1 ? "ok 4" : "not ok 4", "\n";


Als Ausgabe bei "make test" erhalte ich:
Code: (dl )
1
2
3
4
5
6
7
8
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Mytest....FAILED tests 2-4
Failed 3/1 tests, -200.00% okay
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/Mytest.t 1 3 300.00% 2-4
Failed 1/1 test scripts, 0.00% okay. -3/1 subtests failed, 400.00% okay.
make: *** [test_dynamic] Fehler 255
renee
 2007-10-11 11:15
#100656 #100656
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welche Fehlermeldungen denn?

In Mytest.t sollte statt des "print 1..4" etc. nach den Aenderungen das hier stehen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Mytest.t'

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More tests => 4;
BEGIN { use_ok('Mytest') };

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

is(&Mytest::is_even(0), 1);
is(&Mytest::is_even(1), 0);
is(&Mytest::is_even(2), 1);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-10-11 11:24
#100657 #100657
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ändere mal die .t-Datei so wie ich es geschrieben hatte...

Edit: und poste bitte mal die Ausgabe von "make test"
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
MechaTikal
 2007-10-11 11:34
#100659 #100659
User since
2007-10-10
20 Artikel
BenutzerIn
[default_avatar]
renee+2007-10-11 09:24:11--
Ändere mal die .t-Datei so wie ich es geschrieben hatte...

Edit: und poste bitte mal die Ausgabe von "make test"


Steht doch oben schon ;)

Habe es geändert und make test ergibt Folgendes:


Code: (dl )
1
2
3
4
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Mytest....ok
All tests successful.
Files=1, Tests=4, 0 wallclock secs ( 0.03 cusr + 0.00 csys = 0.03 CPU)


Dummerweise ist das nicht das, was im Tutorial beschrieben steht. Ich will es ja ganz gerne genau so haben, es kann doch nicht sein, dass das Tutorial so dermaßen veraltet ist!
renee
 2007-10-11 11:39
#100661 #100661
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Tutorial bezieht sich noch auf Perl 5.6.1. Ich bin gerade dabei, einen Patch dafür zu schreiben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
MechaTikal
 2007-10-11 12:41
#100666 #100666
User since
2007-10-10
20 Artikel
BenutzerIn
[default_avatar]
EDIT:
Hat sich erledigt. Wie in Mytest.t beschrieben, soll man erst "make install" und dann "perl Mytest.t" ausführen. So klappt das Ganze auch wie im Tutorial beschrieben. Wäre schön, wenn das mal jemand aktualisieren würde.
Danke trotzdem für die Hlfe. Hat sich schon mal jemand intensiver mit XS befasst?
pq
 2007-10-11 12:56
#100667 #100667
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
MechaTikal+2007-10-11 10:41:50--
EDIT:
Hat sich erledigt. Wie in Mytest.t beschrieben, soll man erst "make install" und dann "perl Mytest.t" ausführen. So klappt das Ganze auch wie im Tutorial beschrieben. Wäre schön, wenn das mal jemand aktualisieren würde.
Danke trotzdem für die Hlfe. Hat sich schon mal jemand intensiver mit XS befasst?

wenn man perl Mytest.t aufruft, kann perl ja auch das modul gar nicht finden. test-skripte
sind dazu da, dass man sie *vor* der installation aufruft. nur macht make test alles
automatisch, aber wenn man von hand ein test-skript aufruft, macht man das mit
Code: (dl )
1
2
3
4
5
perl -Mblib t/Mytest.t # benutzt das modul 'blib', welches das verzeichnis blib/lib als pfad benutzt
oder
perl -Iblib/lib t/Mytest.t # f[gt den pfad blib/lib direkt hinzu
oder
prove t/Mytest.t # macht das, was make test macht, nur einzeln

sonst müsste man ja, wenn man ein eigenes modul testet, es bei jeder anderung installieren.
das kann ja nicht der sinn der sache sein.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 9 Einträge, 1 Seite



View all threads created 2007-10-10 17:44.