рд╕рдореГрджреНрдз рд░реВрд╕реА рдореЗрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреБрдЫ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП "рд▓рд┐рдЦ / рд▓рд┐рдЦреЗрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг" рдХреЗ рд╕рд╛рде рдиреЛрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ рд▓рдВрдмрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛редрдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдкреБрд░рд╛рдиреА рдкрд░реАрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдпрд╛рдж рд░рдЦреЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рдзреЛрдЦрд╛ рд╢реАрдЯ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдерд╛, рд╢рд╛рдпрдж рдХреЛрдИ рдФрд░ рдХрд░реЗрдЧрд╛ред
рддреБрд░рдВрдд рдореИрдВ рдЖрдкрд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЬреНрдпрд╛рджрд╛ рдХрд┐рдХ рди рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдзреЛрдЦрд╛ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЪрд╛рджрд░ рд╣реИ, рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред
рд░реИрдВрдбрдо рдирдВрдмрд░ рдЬреЗрдирд░реЗрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
BEGIN { *CORE::GLOBAL::rand = sub {66}; }
рд╕рдордп рдмрджрд▓рд╛
use Test::MockTime qw( :all ); set_fixed_time( 1305636470 );
CPAN:
рдЯреЗрд╕реНрдЯ :: рдореЙрдХрдЯрд╛рдЗрдорд╕реНрдкреВрдлрд┐рдВрдЧ рд░реЗрдбрд┐рд╕
use Test::Mock::Redis; my $redis = Test::Mock::Redis->new( server => 'whatever' );
CPAN:
рдЯреЗрд╕реНрдЯ :: рдореЙрдХ :: рд░реЗрдбрд┐рд╕DBMS рд╕реНрдкреВрдлрд┐рдВрдЧ
рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ:
use DBI; my $dbh = DBI->connect( 'dbi:Mock:', '', '' ); my $history = $dbh->{mock_all_history}; my $st = $history->[0];
рдЪрдпрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирдХрд▓реА рдкрд░рд┐рдгрд╛рдо рдЦрд┐рд╕рдХрд╛рдиреЗ рд╣реЛрдВрдЧреЗ:
$dbh->{mock_add_resultset} = { sql => 'SELECT emergency_dequeue_start()', results => [ [ 'emergency_dequeue_start' ], [ '11' ], ], };
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдУрдЖрд░рдПрдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдпрд╛ рдЬреЛ рдЗрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╛рдВрдзрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
CPAN:
DBD :: рдирдХрд▓реАHTTP рд╕реНрдХреНрд░рд┐рдкреНрдЯ (LWP :: UserAgent) рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЬрдЧрд╣
use Test::Mock::LWP; $Mock_ua->mock( agent => sub {'My Agent 007'} ); $Mock_request->mock( content_type => sub {'application/x-www-form-urlencoded'} ); $Mock_response->mock( code => sub {200} ); $Mock_response->mock( content => sub {$response} ); $Mock_response->mock( is_error => sub {0} ); $Mock_response->mock( status_line => sub {'status line'} );
$ рдкреНрд░рддрд┐рд╕рд╛рдж рдЪрд░ рдХреЗ рдорд╛рди рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ, рд╣рдо "рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ () рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдз рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд░реЗрдВ:
$Mock_ua->mock( agent => sub { 'SMSOnline plc' } ); $Mock_request->mock( content_type => sub { 'application/x-www-form-urlencoded' } ); $Mock_request->mock( content => sub { ( my $self, $got_request ) = @_; $got_request; } ); $Mock_response->mock( code => sub { 200 } ); $Mock_response->mock( content => sub { $response } ); $Mock_response->mock( is_error => sub { 0 } ); $Mock_response->mock( status_line => sub { 'status line' } );
рд╣рдо рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ $ got_request рдореЗрдВ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ
CPAN:
рдЯреЗрд╕реНрдЯ :: рдирдХрд▓реА :: LWPрдПрдХ рдордирдорд╛рдиреА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
my $mock = Test::MockObject->new(); Test::MockObject->fake_new( 'My::Module' ); my @txt_stat = (0, 0); $mock->mock( 'read_txt', sub { return @txt_stat; } ); $mock->mock( 'write_txt', sub { 1; } );
@Txt_stat рдореЗрдВ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ
CPAN:
рдЯреЗрд╕реНрдЯ :: MockObjectLog4perl рд╕реНрдкреВрдлрд┐рдВрдЧ
рдбрд┐рдмрдЧ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди () рд╡рд┐рдзрд┐:
my $logger = Test::MockObject->new(); Test::MockObject->fake_new( 'Log::Log4perl::init' ); $logger->mock( 'debug', sub { shift; diag shift; } );
рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд╛рдпрдЧ рд╢рд┐рдлреНрдЯ; рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рд╡реЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЗрд╕реА рддрд░рд╣, рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдВрджрд░реНрдн
рдЯреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ :: MockObjectDBD рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ :: рдирдХрд▓реАMrrico рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рд▓рд┐рдВрдХ