OK, I am still getting the same output (see below) and I think I am beginning to understand why ... so I hope my fellow Monks will excuse my ox-like progress ... :^)
In the script I am testing, what is now the sub main() calls out to a parse_opts() routine to set the values in %params. Therefore (if I am understanding this), the line I have added to myScript to enable testing, e.g.
main( @ARGV ) unless caller( );
... doesn't really make sense because the script isn't accessing @ARGV directly -- it is doing so via Getopt::Long and a parse_opts() routine. In other words there is kind of a collision of approaches here.
... so I am still lost in a way. Am not sure if I need to totally recast the script to be tested so that it doesn't make use of this form of parameter processing, or if there is still a way to do what I want, e.g. write a test that allows one to point the script at a particular file, read 'dummy' input and create 'dummy' output, and test that that is all being done correctly.
For what it is worth, this is what test_myScript.t looks like now:
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 5;
use Test::Exception;
ok( require( 'pluck4gl' ), 'loaded file okay' ) or exit;
my @ARGV = ('-files=S2008-10-22_13:01.failed.lis','-output=doodad.4gl'
+,'/data/mola/sap/daily4gl/S2008-10-22_13:01.4gl');
throws_ok (sub {main ( @ARGV )}, qr/Usage:/, 'main () should give a us
+age error without any arguments');
throws_ok (sub {main( 'bad command' ) }, qr/Unknown command 'bad comma
+nd'/,
'... or with a bad command given');
... and here is the output:
1..5
ok 1 - loaded file okay
parameter `files' not set
parameter `output' not set
# Looks like you planned 5 tests but only ran 1.
# Looks like your test died just after 1.
I apologize for my utter fecklessness. I definitely need some more feck.
Thanks,
G |