harryf has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm trying to test some code that calls a DB stored procedure and gets a value back via DBI::st::bind_param_inout(). Have a mock object (created using Test::MockObject) representing the statement handle but can't work out how to get the value back, as illustrated by;
use strict; sub isMoreThanTen { my ( $sth ) = shift; my $count = undef; $sth->bind_param_inout(\$count); return $count > 10 ? 1 : 0; } use Test::MockObject; my $msth = Test::MockObject->new(); # Attempting to return by reference... $msth->mock('bind_param_inout',sub { $_[0] = 11; }); if ( isMoreThanTen($msth) ) { print "More than 10\n"; } else { print "Less than or equal to 10\n"; }
Which results in;
Use of uninitialized value in numeric gt (>) at bindinout.pl line 7. Less than or equal to 10
Have also looked as DBD::Mock but (unless I've misunderstood) it's bind_param_inout doesn't seem to be intended for this purpose. How can I do this? Many thanks.

Replies are listed 'Best First'.
Re: Test mocking sth bind_param_inout
by chromatic (Archbishop) on Sep 01, 2006 at 10:50 UTC

    The first argument to the mocked method is the invocant. I think you mean instead:

    $msth->mock('bind_param_inout',sub { ${ $_[1] } = 11; });
      Jeez - will go and slap myself now - don't want to total the time I spent looking in the wrong place. Had missed the point on the reference there as well. Many thanks.