Thread use Test::Simple;: wie teste ich richtig?! (5 answers)
Opened by Ronnie at 2005-03-22 14:18

kabel
 2005-03-23 12:02
#52863 #52863
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
die codefragmente sind in der reihenfolge, ich hab nur einzelne statements rausgezogen um sie farbig markieren zu können.

Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl

use strict;
use warnings;

#use Data::Dumper;
use Test::Simple tests => 12;

use DB::Countries;

hierfür gibts require_ok/use_ok, dafür brauchts du allerdings Test::More. Test::More hat Test::Simple als API untermenge, du kannst also einfach Test::More anstelle Test::Simple importieren.
Code: (dl )
1
2
3
my $country = new DB::Countries;
my $to_insert = { country => 'Testunien',
country_code => 'TST' };

my $inserted = $country->insert($to_insert);
entweder du testest $inserted direkt hier oder der nachfolgende hash hat mind. 2 möglichkeiten für den wert hinter dem schlüssel ID_country. ist das wirklich was du willst?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my $to_update = { country       => 'Lummerland',
country_code => 'LUM',
ID_country => $inserted };

ok (defined $inserted,
'$inserted is defined');

ok ($inserted =~ m/^\d+$/,
'$inserted is a numerical id');

my $response = $country->get($inserted);

ok (defined $response,
'$response is defined');

ok (ref $response eq 'ARRAY',
'$response is a reference to an array');

dafür gibts isa_ok, oder du benutzt die kurzschlussemantik von &&. aber dafür ganze zwei zeilen?! ;)
ok ($response->[0]->{country} eq 'Testunien',
'$response->[0]->{country} has expected value: "Testunien"');
der code funktioniert nur unter der annahme, dass $response mind. 1 element enthält.
Code: (dl )
1
2
ok ($response->[0]->{country_code} eq 'TST',
'$response->[0]->{country_code} has expected value: "TST"');

ok ($country->update($to_update),
'$country->update($to_update) called and succeeded');

heisst das dass update eine exception schmeisst oder das update eine wert > 0 zurückliefert wenn die operation erfolgreich war?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$response = $country->get($inserted);

ok (defined $response,
'$response is defined');

ok (ref $response eq 'ARRAY',
'$response is a reference to an array');

ok ($response->[0]->{country} eq 'Lummerland',
'$response->[0]->{country} has expected value: "Lummerland"');

ok ($response->[0]->{country_code} eq 'LUM',
'$response->[0]->{country_code} has expected value: "LUM"');

ok ($country->remove($inserted),
'$country->remove($inserted) called and succeeded');

exit;


schau dir den code mal genau an. du willst, dass $response eine bestimmte struktur hat, die du vorher angeben kannst.
dafür gibts is_deeply().

schau dir auch mal can_ok() an.

btw einer der fünf smileys ist echt. rate mal welcher.

hth
-- stefan

View full thread use Test::Simple;: wie teste ich richtig?!