--- 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/

Reply via email to