#!/usr/bin/perl -w use warnings; use strict; use feature qw(switch say); use English; use Test::More tests => 20; #'no_plan'; use Test::MockObject; use Test::Output; use Test::Trap; 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_with_subs.pl'; # used __DATA__ instead my $code_to_test = do { local $/; }; my @cases = ('A', 'B', 'C'); foreach my $case (@cases) { use_ok('NaServer'); can_ok( 'NaServer', 'new'); can_ok( 'NaServer', 'get_val'); my @r = trap { push @ARGV, $case; #eval read_file($script); eval $code_to_test; ## no critic (ProhibitStringyEval) if (defined $EVAL_ERROR) { die $EVAL_ERROR }; }; if ($trap->die) { croak $trap->die; } if ($trap->warn) { foreach (@{$trap->warn}) { warn $_ . "\n"; } } like ( $trap->stdout, qr'Value\ for\ [A-Z]\ OK\ \(500\)\n', "$case: stdout as expected (OK 500)" ); like ( $trap->stderr, qr'', "$case: stderr as expected (emtpy)" ); is ( $trap->exit, 0, "$case: exit-value as expected (0)" ); } __DATA__ # ================== # = Script to Test = # ================== #!/usr/bin/perl -w use warnings; use strict; use feature qw(switch say); use NaServer; use Carp; my $dings = $ARGV[0] || 'dummydings'; my $session = NaServer->new(); my $val = $session->get_val(); if ($val > 500 ) { say_it ("Value for $dings to high: " . $val); exit 2; } else { say_it ("Value for $dings OK ($val)"); exit 0; } sub say_it { my $msg = shift; say $msg; return; }