NAME
Test::Routine::AutoClear - Enables autoclearing attrs in Test::Routines
VERSION
version 0.003
SYNOPSIS
use Test::Routine::AutoClear;
use Test::More;
use File::Tempdir;
has _tempdir => (
is => 'ro',
isa => 'Int',
builder => '_build_tempdir',
lazy => 1,
autoclear => 1,
handles => {
tempdir => 'name',
},
);
sub _build_tempdir {
File::Tempdir->new();
}
And now all the tests that use a tempdir in your test routine will get a fresh Tempdir
DESCRIPTION
When I'm writing tests with Test::Routine I find myself writing code like this all the time:
has counter => (
is => ro,
lazy => 1,
default => 0
lazy => 1,
clearer => 'reset_counter',
);
after run_test => sub {
shift->reset_counter;
};
And after about the first time, I got bored of doing this. So I started to fix it, and here's my first cut.
Test::Routine::AutoClear addresses this by adding a new autoclear
key to the has
arguments. If you set autoclear
to a true value on an attribute then, after each test is run, all the autoclearing attributes will be reset.
Clearing logic
Consider the following Test::Routine:
use Test::More;
use Test::Routine::AutoClear;
use Test::Routine::Util;
has some_attrib => (
is => 'ro',
default => 10,
lazy => 1,
autoclear => 1,
clearer => 'reset_attrib',
);
test "This should be invariant" => sub {
my $self = shift;
my $attrib = $self->attrib;
$self->reset_attrib;
is $self->attrib, $attrib;
};
run_me "Test defaults";
run_me "Test initialising", { attrib => 20 };
done_testing;
It seems to me that, in a perfect world at least, that test should pass. Which it does. Huzzah!
BUGS
Lots. Including, but not limited to:
The interface is still very fluid. I make no promises about interface stability.
I'm pretty sure that if you end up mixing in multiple roles that use this role then you'll end up clearing your attributes lots of times.
Resetting to the initializing value only works for non reference values. Need some way of passing in a builder for hashrefs etc.
SEE ALSO
AUTHOR
Piers Cawley <pdcawley@bofh.org.uk>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Piers Cawley.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.