Mocking Objects

Test::Mock::Simple



Why

  • Test::MockObject pollutes the namespace (remove)
  • Test::Mock::Class, Test::MockClass, Mock::Quick, Test::Mock::Test, Test::Mock::ExternalCommand, Test::EasyMock
  • Test::Mock::Simple ???
  • Am I doing something wrong? 126 (53) vs 904 (446)


package LW::Mock::Network::SNMP::Remote::Acl;

use Test::Mock::Simple;

my %mock_data = ();

my $mock = Test::Mock::Simple->new(module => 'LW::Network::SSH::Remote::Acl');
$mock->add(remove => sub { _remove(@_); }); 

sub add {
  my $self = shift;
  my $name = shift;
  my $sub = shift;

  {
    no strict;
    no warnings;

    *{$self->{module} . '::' . $name} = $sub;
  }
} 



 use_ok('LW::Mock::Network::SSH::Remote::Acl'); 

my $acl = 1977;

my $dist = LW::Subaccnt->search(
     features => { DeviceType => 'Distribution' }
)->first;

$dist->api->acl->remove($acl);
my @current = $dist->api->acl->entries($acl);

is(scalar(@current), 0, "No entries on ACL $acl after delete");
$self (not really 'self')

package LW::Mock::Network::SNMP::Remote::Acl;
use Test::Mock::Simple;

my %mock_data = ();
my $mock = Test::Mock::Simple->new(module => 'LW::Network::SSH::Remote::Acl');
$mock->add(add                        => sub { _add(@_);          });
$mock->add(delete                 => sub { _delete(@_);       });
$mock->add(entries                => sub { _entries(@_);      });
$mock->add(overwrite       => sub { _overwrite(@_);    });
$mock->add(remove             => sub { _remove(@_);       });
$mock->add(type                       => sub { _type(@_);         });

sub _remove {
my ($self, $acl, $entry) = @_;
my $type = ($entry->{ip}) ? 'standard' : 'extended';
$self->_startEditMode($type, $acl);
<...snip...>
sub _startEditMode { <...snip...> }


  • github.com/skeletonkey/TestMockSimple
  • metacpan.org/pod/Test::Mock::Simple

Mocking Objects

By skeletonkey

Mocking Objects

  • 329