[prev] [thread] [next] [Date index for 2005/03/05]
I'm trying to test my Class::DBI modules with DBD::Mock. I think
they have similar philosophies of abstracting the databases.
This is my test code:
my $dbh = Rp::DBI->db_Main;
my @players = (
[ 'indexn', 'classid', 'name', 'score' ],
[ 1, 9230103, 'Jeff', 0 ]
);
$dbh->{mock_add_resultset} = \@players; # add players resultset
my $player = Rp::Players->retrieve(1);
I define db_Main earlier on to use dbd::Mock
return DBI->connect('dbi:Mock:', '', '',
{
# defaults of Class::DBI
RaiseError => 1,
AutoCommit => 0,
PrintError => 0,
Taint => 1,
RootClass => "DBIx::
+ContextualFetch",
ChopBlanks => 1
}
I am getting this error:
DB<8>
Rp::Players can't SELECT indexn
FROM players
WHERE indexn = ?
: Assertion i == (((((SV *) (name_av))->sv_flags & 0x00008000)) ? Perl_mg_size((
(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(((void *)0))))), (SV
*) name_av) : ((XPVAV*) (name_av)->sv_any)->xav_fill)+1 failed: file "DBI.xs", l
ine 1642 at /usr/lib/perl5/site_perl/5.8.5/DBD/Mock.pm line 487.
at t/addrpscore.t line 45
at /usr/lib/perl5/site_perl/5.8.5/Class/DBI.pm line 233
Class::DBI::_croak('Rp::Players', 'Rp::Players can\'t SELECT indexn\x{a}
FROM players\x{a}WHERE indexn...', 'err', '') called at /usr/lib/perl5/site_p
erl/5.8.5/Class/DBI.pm line 1128
Class::DBI::sth_to_objects('Rp::Players', 'DBIx::ContextualFetch::st=HAS
H(0xa1c9554)', 'ARRAY(0xa1c71d4)') called at /usr/lib/perl5/site_perl/5.8.5/Clas
s/DBI.pm line 1093
Class::DBI::_do_search('Rp::Players', '=', 'indexn', 1) called at /usr/l
ib/perl5/site_perl/5.8.5/Class/DBI.pm line 1071
Class::DBI::search('Rp::Players', 'indexn', 1) called at /usr/lib/perl5/
site_perl/5.8.5/Class/DBI.pm line 681
Class::DBI::retrieve('Rp::Players', 1) called at t/addrpscore.t line 45
Debugged program terminated. Use q to quit or R to restart,
use O inhibit_exit to avoid stopping after program termination,
h q, h R or h O to get additional info.
DB<8>
The relevant method of DBD/Mock.pm, FETCH is testing lots of attributes
passed to the method:
NAME, NUM_OF_FIELDS, NUM_OF_PARAMS, TYPE, Active, and then
those where $attrib !~ /^mock/,
before testing those which do start with mock.
The error at line 487 is occuring with the test of $attrib !~ /^mock/,
My guess that DBD::Mock would need to special case the attributes
Class::DBI is feeding to it. Do you think this is so?
--
Greg Matheson, Taiwan
|
DBD::Mock and Class::DBI
|
Generated at 20:12 on 07 Mar 2005 by mariachi v0.52