in reply to the sorry state of Perl unit testing framework
Hello, bulk88!
If you're still interested in this topic, you might find the following exercise called Test::Refute interesting. Right now it seems to be crystallizing into something very similar to what you're proposing: a cleanroom Test::More counterpart, easily extensible, not keeping passed tests, and also much faster than the original.
It's based on powerful $contract->refute( $condition, $message ); primitive. The $contract is an object storing information about (un)met conditions. Or outputting it right away as TAP, if needed. The $message is a human-readable name of the test. The $condition is false if everything is fine and the reason for failure otherwise.
One can think of it as of a program exit code that is always 0 on success, but different for different failure modes.
So an example "is" implementation looks like follows (real one is a bit longer though, undef handling, quoting etc.):
sub { return $_[0] eq $_[1] ? "" : "$_[0]!=$_[1]" };Suddenly this is a pure function! We may need to provide a prototyped exportable wrapper for convenience, but that's left to my builder class. But no builder is required for making test logic.
I'm hoping to go beta around mid-January.
|
|---|