use warnings;
use strict;
use Mock::Sub;
my $m = Mock::Sub->new;
sub foo ($$$){
return undef;
}
my $foo_sub = $m->mock('foo');
####
Prototype mismatch: sub main::foo ($$$) vs none at /home/stevieb/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/Mock/Sub/Child.pm line 122.
Prototype mismatch: sub main::foo: none vs ($$$) at /home/stevieb/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/Mock/Sub/Child.pm line 140.
####
use warnings;
use strict;
use feature 'say';
use Mock::Sub;
$SIG{__WARN__} = sub {say $_[0] if $_[0] !~ /Prototype/};
my $m = Mock::Sub->new;
sub foo ($$$){
say "hello!"; # doesn't get called
return undef;
}
my $foo = $m->mock('foo');
$foo->return_value('test');
say foo(1, 2, 3);
say foo(1, 2, 3);
say foo(1, 2, 3);
say $foo->called_count;
####
test
test
test
3
####
Not enough arguments for main::foo at mock.pl line 21, near "()"
Execution of mock.pl aborted due to compilation errors.
####
{
no strict 'refs';
no warnings 'redefine';
my $mock = $self;
weaken $mock;
*$sub = sub {
@{ $mock->{called_with} } = @_;
++$mock->{called_count};
if ($mock->{side_effect}) {
if (wantarray){
my @effect = $mock->{side_effect}->(@_);
return @effect if @effect;
}
else {
my $effect = $mock->{side_effect}->(@_);
return $effect if defined $effect;
}
}
return if ! defined $mock->{return};
if ($mock->{return}[0] && $mock->{return}[0] eq 'params'){
return ! wantarray ? $_[0] : @_;
}
else {
return ! wantarray && @{ $mock->{return} } == 1
? $mock->{return}[0]
: @{ $mock->{return} };
}
};
}