in reply to Unit tests with MockObjects
You only need to mock the members of the SOAP::Lite interface that you are actually using. Consider:
use strict; use warnings; use Test::MockObject; use Test::More; my $mockSOAP = Test::MockObject->new(); $mockSOAP->fake_module('SOAP::Lite', new => sub {SOAP_new ($mockSOAP, +@_)},); $mockSOAP->mock(soapversion => \&SOAP_soapversion); use_ok('SOAP::Lite'); my $client = SOAP::Lite->new(proxy => 'blah'); is($client->soapversion(), 1.2, 'Version ok'); eval {$client->soapversion(1.3)}; my $result = $@; is($result, "Can't set SOAP version to 1.3\n", 'Bad version rejected') +; done_testing(); sub SOAP_new { my ($mock, $class, %params) = @_; $params{version} ||= 1.2; $mock->{newParams} = \%params; $mock->{newClass} = $class; return $mock; } sub SOAP_soapversion { my ($self, $version) = @_; die "Can't set SOAP version to $version\n" if defined $version && $version != 1.2 && $version != 1.1; $self->{newParams}{version} = $version if defined $version; return $self->{newParams}{version}; }
Prints:
ok 1 - use SOAP::Lite; ok 2 - Version ok ok 3 - Bad version rejected 1..3
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Unit tests with MockObjects
by rovingeyes (Sexton) on Feb 16, 2010 at 22:34 UTC |