NAME
Test::AutoMock::Patch - Monkey patch for returning AutoMock
SYNOPSIS
use Test::AutoMock::Patch qw(patch_sub);
# a black box function you want to test
sub get_metacpan {
my $ua = LWP::UserAgent->new;
my $response = $ua->get('https://metacpan.org/');
if ($response->is_success) {
return $response->decoded_content; # or whatever
}
else {
die $response->status_line;
}
}
# apply a monkey patch to LWP::UserAgent::new
patch_sub {
my $mock = shift;
# set up the mock
manager($mock)->add_method('get->decoded_content' => "Hello, metacpan!\n");
# call blackbox function
my $body = get_metacpan();
# assertions
is $body, "Hello, metacpan!\n";
manager($mock)->called_with_ok('get->is_success' => []);
manager($mock)->not_called_ok('get->status_line');
} 'LWP::UserAgent::new';
DESCRIPTION
Temporarily replace any subroutine and return AutoMock. It is convenient when mock can not be injected from outside.
FUNCTIONS
patch_sub
patch_sub {
my ($mock, $other_mock) = @_;
# write your test using $mock
} 'Path::To::subroutine', 'Path::To::other_subroutine';
Replace the specified subroutine with one that returns a mock, and execute the code in the block. The mock object is passed as the argument of the block by the number of replaced subroutines. After exiting the block, the patch is removed.
The generated mock object is an instance of Test::AutoMock::Mock::Overloaded.
It is a common usage to patch the class method used as a constructor.
LICENSE
Copyright (C) Masahiro Honma.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Masahiro Honma <hiratara@cpan.org>