--- Peter Kay <[EMAIL PROTECTED]> wrote:
> Ok, what's the elegent way to ignore/dispose of the output the tested
> module produces?
What I do whenever this happens is to move the printing code to a subroutine or method
and
override that to capture the output. So if I have something like this:
sub Foo::_print {
print shift;
}
In my test, I have something like this:
my $_print;
*Foo::_print = sub { $_print = shift };
is($_print, $expected, "Foo::_print output the correct data");
This has several benefits. Not only do you not worry about how Test::Harness will
react, you also
have the ability to test the printed data, something which is frequently not done.
Also, I've
found that by refactoring such functionality into one subroutine, I later have a
convenient place
to alter the behavior, if necessary, rather than hunt through the code. I've found
this to be
very useful if I need to send the data to different destinations or add behavior such
as emailing
critical error messages or reports.
If you hate using typeglobs:
use Sub::Override; # disclaimer: I wrote it.
my $_print;
my $override = Sub::Override->new('Foo::_print' => sub { $_print = shift });
(You can later restore the subroutine, if needed)
Cheers,
Ovid
=====
Silence is Evil http://users.easystreet.com/ovid/philosophy/indexdecency.htm
Ovid http://www.perlmonks.org/index.pl?node_id=17000
Web Programming with Perl http://users.easystreet.com/ovid/cgi_course/