in reply to Re^2: Checking parameters passed to a third party module during testing (wrap)
in thread Checking parameters passed to a third party module during testing
use strict; use warnings; use Test::More tests => 1; my $new; BEGIN { require MIME::Lite; $new = MIME::Lite->can ("new"); no warnings 'redefine'; *MIME::Lite::new = \&MIME_Lite_new_wrapper; } sub MIME_Lite_new_wrapper { print "Validating MIME::Lite::new params\n"; goto $new; } ok (checkSub (), 'Match existing path'); sub checkSub { my $msg = MIME::Lite->new ((To => 'to', )); my $result = eval {$msg->send}; }
In your original code, you're redefining MIME::Lite::new(). I'm leaving that function alone, creating a new function, MIME_LITE_new_wrapper(), and then updating the symbol table (*MIME::Lite::new{CODE}) to point to my function. In that way, perl doesn't redefine MIME::Lite::new() to your local sub.
I don't know enough about the perl guts to understand why the reference to the original in $new isn't sufficient to maintain the original code definition.
Perhaps someone with more of a clue can chime in. Most of my knowledge of this stuff is cobbled together from perldoc perlref, old posts on c.l.p.m, and looking at the code of various modules that do tricky things with symbol tables.
Cheers,
|
|---|