Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^3: Writing tests when you don't know what the output should be

by stevieb (Canon)
on May 17, 2016 at 21:09 UTC ( [id://1163268]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Writing tests when you don't know what the output should be
in thread Writing tests when you don't know what the output should be

How do you plan on deciding which files to load then? Will they be defined by name in some sort of configuration?

You should be setting up an actual distribution structure. See Module::Starter. All of your tests go in t/, and you can then create a test directory structure and associated data in for eg: t/data/. Your module should have a method or something that allows a script to tell it what directory to look in for the files (the tests in the t/*.t test files would do this).

Setting up a proper testing infrastructure allows you to very precisely control everything, and easily and quickly add new sample data and new tests going forward while making changes, or particularly when a bug has been found.

Any chance you could show us the code you have so far?

Replies are listed 'Best First'.
Re^4: Writing tests when you don't know what the output should be
by nysus (Parson) on May 17, 2016 at 21:58 UTC

    Sure thing:

    package DupEventChecker; use Modern::Perl; use IO::Dir; use Moose; has 'dir' => ( is => 'ro', isa => 'IO::Dir', writer => '_set_dir' ); sub BUILD { my $self = shift; my $args = shift; $self->_set_dir(IO::Dir->new($args->{dir_name})); } return 1;

    And here's the script:

    use Modern::Perl; use DupEventChecker; my $dir = DupEventChecker->new({dir_name => '.'});

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks

      OK, try adding something like
      use FindBin; use Test::More tests => 3; use Test::Exception; dies_ok { 'DupEventChecker'->new } 'dir_name not provided'; my $checker = 'DupEventChecker'->new(dir_name => $FindBin::Bin); isa_ok $checker, 'DupEventChecker'; my ($itself) = grep { 0 <= index $0, $_ } $checker->dir->read; ok $itself, 'test script found';

      BTW, dir_name is required, but it isn't apparent from the declaration. dir could also have a default (e.g. '.', Cwd::getcwd or File::HomeDir->my_home).

      Update: Example added to the BTW. Update 2: The example was improved.

      ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

        Thanks for this. Can you please help me understand why you used an internal and external accessor for dir? I'm new to Moose and I'm not quite sure why you did that. Thanks.

        $PM = "Perl Monk's";
        $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
        $nysus = $PM . ' ' . $MCF;
        Click here if you love Perl Monks

        One other question about your example if I might impose. That second to last line has me scratching my head. The grep $0 is nothing I'm familiar with and the regex has me baffled as well. Thanks!

        $PM = "Perl Monk's";
        $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
        $nysus = $PM . ' ' . $MCF;
        Click here if you love Perl Monks

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1163268]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-04-23 21:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found