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}; }