Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

NAME
Test::FixtureBuilder - Quickly define fixture data for unit tests
DESCRIPTION
When writing unit tests for applications it is often necessary to load
some basic data into a database. This data is often referred to fixture
data. There are several approaches to loading fixture data: Manual, From
YAML files, or code to create objects.
Sometimes you just want to shove some rows into a database, and you do
not want to be bothered with the SQL or the object->new calls. In those
cases this module is for you.
SYNOPSYS
There are two interfaces to this module.
DECLARE
The declarative interface is really quite nice.
NOTE: You MUST subclass Test::FixtureBuilder, or use a predefined
subclass in order to use the declarative form.
package Test::FixtureBuilder::MyBuilder;
use DBI;
use DBD::SQLite;
use base Test::FixtureBuilder;
sub name_to_handle {
my $class = shift;
my ($name) = @_;
return DBI->connect("dbi:SQLite:dbname=$name","","");
}
1;
Then to use it:
use Test::FixtureBuilder::MyBuilder;
fixture_db my_db => sub {
fixture_table my_table => sub {
fixture_row { col1 => 'val1', col2 => 'val2' };
fixture_row { key => $_, col2 => 'xxx' }
for 1 .. 10;
};
fixture_table my_table2 => sub {
fixture_row { col1 => 'val1', col2 => 'val2' };
};
};
fixture_db my_db2 => sub { ... };
...
1;
OOP
use Test::FixtureBuilder ();
my $fb = Test::FixtureBuilder->new( dbh => $dbh );
$fb->insert_row(tableA => { col1 => 'val1' });
$fb->insert_row(tableB => { col1 => 'val1' });
$fb->insert_rows(
'tableX',
{ ... },
{ ... },
...
);
EXPORTS
fixture_db db_name => sub { ... }
Create a scope in which fixtures use the db_name database
fixture_table table_name => sub { ... }
Create a scope in which fixtures use the table_name table
fixture_row { col => val, ... }
fixture_row ( col => val, ... )
fixture_row col => val, ...
Load a row, you can use a hashref, or key/value pairs.
my $meta = $class->FIXTURE_BUILDER_META
Get the meta-object. Documented for completeness, you should not use
this directly.
METHODS
my $dbh = $class->name_to_handle($dbname)
Get a database handle from a name. You must override this before it
will do anything useful. The default behavior is to die unless the
$dbname variable is blessed in which case it is returned unchanged.
my $fb = $class->new(...)
Create a new instance. Any valid accessor can be specified at
construction time. This includes accessors for your specific
subclass.
$class = $fb->class
Used internally.
$fb->db($dbname)
$dbh = $fb->db
Set the database by name (only useful if you override
"name_to_handle()"). When no argument is given it behaves like
"dbh()".
$fb->dbh($dbh)
$dbh = $fb->dbh
Get and/or set the database handle.
$fb->insert_row(table => { ... })
Insert a row into the specified table of the current database.
$fb->insert_rows(table => { ... }, { ... }, ...)
Insert multiple rows into the specified table of the current
database.
AUTHORS
Chad Granum exodist7@gmail.com
OTHER CREDITS
DreamHost
I originally developed a tool very similar to this one for use at
DreamHost in our test suite. DreamHost gave me permission to release
an open-source implementation of the tool.
COPYRIGHT
Copyright (C) 2014 Chad Granum
Test-FixtureBuilder is free software; Standard perl license (GPL and
Artistic).
Test-FixtureBuilder is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for
more details.