use strict;
use warnings;
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'MyGreeting',
VERSION_FROM => 'lib/MyGreeting.pm',
LICENSE => 'perl',
TEST_REQUIRES => {
'Test::More' => '0',
'Test::MockModule' => '0',
},
);
package MyGreeting;
use strict;
use warnings;
use MyGreeting::Provider ();
our $VERSION = '0.01';
sub greet {
my ($class, $name) = @_;
my $prefix = MyGreeting::Provider::get_greeting_prefix();
return "$prefix $name";
}
1;
package MyGreeting::Provider;
use strict;
use warnings;
sub get_greeting_prefix {
# pretend that it takes time maybe because it is an external call.
sleep(3);
return 'Hello';
}
1;
use strict;
use warnings;
use Test::More;
use Test::MockModule;
use MyGreeting;
is(
MyGreeting->greet('Gabor'),
'Hello Gabor',
'real provider returns the default prefix',
);
my $provider = Test::MockModule->new('MyGreeting::Provider');
$provider->redefine(
get_greeting_prefix => sub {
return 'Good morning';
}
);
is(
MyGreeting->greet('Gabor'),
'Good morning Gabor',
'mocked provider changes the greeting',
);
done_testing;