Hi all,
I am trying to write test for the application I am maintaining. It has a lot of OO modules. To start, I created a test like this for one of those modules (modified from the original code):
#!/usr/bin/perl
use strict;
use warnings;
use Test::MockObject::Extends;
my $mock_property = Test::MockObject::Extends->new('MyApp::Property');
$mock_property->mock('id', '1');
$mock_property->mock('su_pwd', 'password');
my $admin = MyApp::Admin->new(owner => $mock_property, id => 0);
is_deeply(
$admin,
{
admin_id => 0,
domain_id => '1',
firstname => 'Super',
lastname => 'User',
username => 'su',
password => 'password',
},
"new() with id eq '0' (superuser)"
);
-----------------------------------
package MyApp::Admin;
use strict;
use warnings;
use Params::Validate ':all';
sub new
{
my $class = shift;
my %args = validate(@_,
id => { type => SCALAR },
owner => { isa => 'MyApp::Property' },
);
my $self = bless {
admin_id => $args{id},
domain_id => $args{owner}->id,
firstname => 'Super',
lastname => 'User',
username => 'su',
password => $args{owner}->su_pwd,
}, $class;
return $self;
}
When I run the test, it breaks with Params::Validate error saying that 'owner' parameter is an object of 'T::MO::E::a', not 'MyApp::Property'. I guess this is because Params::Validate does not validate the 'owner' parameter by calling 'isa', but checking the perl's internal data structure to check 'isa'.
Is there anyway to go around this? Or do I have to create my own mock object library?
Thanks
--------------
badaiaqrandista
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.