Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

How to ask better questions using Test::More and sample data

by neilwatson (Priest)
on Feb 08, 2016 at 20:24 UTC ( [id://1154672]=perlmeditation: print w/replies, xml ) Need Help??

I encourage wisdom seekers to present sample data and use Test::More in the example code of their question. Let's look at some examples.

How do I make the regex match?

#!/usr/bin/perl use strict; use warnings; use Test::More; my $data = "Some string here"; my $regex = qr/ fancy regex here /mxis; like( $data, $regex, "Matching my regex" ); done_testing;

Your code fails, but readers can read this code and run it and make changes that will make it pass.

Why does my sub return an error?

#!/usr/bin/perl use strict; use warnings; use Test::More; sub mysub { return; } ok( mysub(), "Should return true" ); done_testing;

Presenting larger sample data as if you were reading a file line by line.

Use __DATA__.

#!/usr/bin/perl use strict; use warnings; use Test::More; my $wanted_matches = 2; my $actual_matches = 0; my $regex = qr/ fancy regex here /mxis; while ( my $line = <DATA> ) { chomp $line; if ( $line =~ $regex ){ $actual_matches++; } } ok( $wanted_matches == $actual_matches, "Correct number of matches" ); done_testing; __DATA__ line one..... line two..... .... line ten.....

Neil Watson
watson-wilson.ca

Replies are listed 'Best First'.
Re: How to ask better questions using Test::More and sample data
by haukex (Archbishop) on Oct 12, 2017 at 10:31 UTC

    This post makes excellent points! Just to expand a little on regex testing - having many test cases helps:

    #!/usr/bin/env perl use warnings; use strict; use Test::More; #use re 'debug'; # optional my $regex = qr/(foo|bar)(quz|baz)?$/; # "match / doesn't match" tests like "foo", $regex; like "bar", $regex; like "foobar", $regex; like "fooquz", $regex; like "foobaz", $regex; like "barbaz", $regex; like "foobarquz", $regex; like "foobarfooquz", $regex; unlike "foobarquzbaz", $regex; unlike "quzbaz", $regex; unlike "hello", $regex; unlike "foo ", $regex; # etc. # check capture groups ok "foobar" =~ $regex; is $1, "bar"; is $2, undef; ok "foobarquz" =~ $regex; is $1, "bar"; is $2, "quz"; ok "foobaz" =~ $regex; is $1, "foo"; is $2, "baz"; # etc. # and/or check return values in list context is_deeply [ "foobar" =~ $regex ], [ "bar", undef ]; is_deeply [ "fooquz" =~ $regex ], [ "foo", "quz" ]; is_deeply [ "barbaz" =~ $regex ], [ "bar", "baz" ]; # etc. # an example with /g return values is_deeply [ "foobarquzbaz" =~ /[aeiou]/g ], [ "o", "o", "a", "u", "a" ]; # same thing, written differently: my @matches = "foobarquzbaz" =~ /[aeiou]/g; is_deeply \@matches, [ "o", "o", "a", "u", "a" ]; done_testing;
Re: How to ask better questions using Test::More and sample data
by stevieb (Canon) on Feb 09, 2016 at 02:21 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlmeditation [id://1154672]
Approved by ww
Front-paged by ww
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2024-04-24 23:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found