#!/usr/bin/perl -w use warnings; use strict; use feature qw( say ); use English; use Test::More tests => 26; #'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 module start here = # ================================== my @cases = ( { name => 'wrong_threshold', argv => 'hudriwudri', expected_stdout => qr'invalid argument', expected_stderr => '', expected_exit => 3, }, { name => 'high_threshold', argv => 1000, expected_stdout => qr'OK', expected_stderr => '', expected_exit => 0, }, { name => 'low_threshold', argv => 20, expected_stdout => qr'Value\ to\ high', expected_stderr => '', expected_exit => 2, } ); foreach my $case (@cases) { use_ok('NaServer'); can_ok( 'NaServer', 'new'); can_ok( 'NaServer', 'get_val'); use_ok('NaServerExt'); can_ok('NaServerExt', 'run'); my @r = trap { NaServerExt->run($case->{'argv'}); }; if ($trap->die) { croak $trap->die; } if ($trap->warn) { foreach (@{$trap->warn}) { warn $_ . "\n"; } } like ( $trap->stdout, $case->{'expected_stdout'}, "$case->{'name'}: stdout as expected" ); is ( $trap->stderr, $case->{'expected_stderr'}, "$case->{'name'}: stderr as expected" ); is ( $trap->exit, $case->{'expected_exit'}, "$case->{'name'}: exit-value as expected" ); }