#!/usr/bin/perl -w
use warnings;
use strict;
use feature qw(switch say);
use NaServer;
my $session = NaServer->new();
my $val = $session->get_val();
if ($val > 500 ) {
say 'Value to high: ' . $val;
exit 2;
} else {
say "Value OK ($val)";
exit 0;
}
####
package NaServer;
# this is just a dummy version of NetApps NaServer !!
use strict;
use warnings;
use Carp;
sub new {
my $class = shift;
my $self = {};
bless \$self, $class;
}
sub get_val {
return rand 1000;
}
1;
####
#!/usr/bin/perl -w
use warnings;
use strict;
use feature qw(switch say);
use Test::More tests => 3;
use Test::MockObject;
use Test::Output;
my $mock = Test::MockObject->new();
$mock->fake_module ('NaServer',
new => sub { return 'NaServer' },
get_val => sub { return 500 },
);
use_ok( 'NaServer' ) or exit; ## includes 'use NaServer;'
# Construction of $s just for testing
my $s = NaServer->new( 'sim8aXXXXXX', 1, 6 );
isa_ok( $s, 'NaServer');
# ==================================
# = Tests of the script start here =
# ==================================
use File::Slurp;
my $script = 'script_to_test.pl';
eval 'package Script; sub test {' . read_file($script) . '}';
stdout_is { Script::test() } qq{Value OK (500)\n}, 'stdout as expected';
__END__
## This does not work as expected, since the test stdout_is is never reached.
## Exits in script_to_test.pl prevent this.
####
#!/usr/bin/perl -w
use warnings;
use strict;
use feature qw(switch say);
use Test::More tests => 3;
use Test::MockObject;
my $mock = Test::MockObject->new();
$mock->fake_module ('NaServer',
new => sub { return 'NaServer' },
get_val => sub { return 500 },
);
use_ok( 'NaServer' ) or exit; ## includes 'use NaServer;'
# Construction of $s just for testing
my $s = NaServer->new( 'sim8aXXXXXX', 1, 6 );
isa_ok( $s, 'NaServer');
# ==================================
# = Tests of the script start here =
# ==================================
use Test::Trap;
use File::Slurp;
my $script = 'script_to_test.pl';
my @r = trap {
eval read_file($script)
};
is ($trap->stdout, "Value OK (500)\n", 'stdout as expected');
__END__
# This works fine, traping after having mocked the NaServer was the trick.
# Thanks to the monks!