NAME
Class::PObject::Test - Base test framework for Class::PObject drivers
SYNOPSIS
package Class::PObject::Test::MyTest;
require Class::PObject::Test;
@ISA = ('Class::PObject::Test');
sub run {
my $self = shift;
my $driver = $self->{driver};
my $datasource = $self->{datasource};
# perform your tests using $driver and $datasource
}
ABSTRACT
Class::PObject::Test is a base testing framework for Class::PObject drivers.
DESCRIPTION
Class::PObject::Test is used as a base class by test libraries, and provides two methods, new()
and run()
. Subclasses of Class::PObject::Test are expected to override run()
method.
IS THIS WAY OF TESTING NECESSARY
Same sets of tests must be performed for every single driver available to ensure all the drivers are compatible. That's why, instead of putting redundant chunks of codes in multiple t/*.t files, we simply create a library, which can run same tests for different drivers.
For example, to run some basic/core tests on file
driver, we do:
# t/01basic_file.t
use Class::PObject::Test::Basic;
$t = new Class::PObject::Test::Basic('file', './data');
$t->run()
To run these same set of tests for mysql driver, for example, we can do:
# t/02basic_mysql.t
use Class::PObject::Test::Basic;
$t = new Class::PObject::Test::Basic('mysql', {Handle=>$dbh});
$t->run()
and so on.
This will ensure that same exact tests are run for every driver.
METHODS
new($driver, $datasource)
- constructor method. Accepts two arguments, $driver and $datasource. You can access these object attributes from withinrun()
to generate pobjects for testing purposes.run()
- runs the tests. You can use Test::More - testing library for running the tests. A very simple test can look like:sub run { my $self = shift; pobject ClassName => { columns => ['id', 'a', 'b', 'c'], driver => $self->{driver}, datasource => $self->{datasource} }; ok(1); my $obj = ClassName->new(); ok($obj); $obj->a('A'); $obj->b('B'); ok($obj->save) }
If you want to write a special test library, you are expected to do a little more than that, because Class::PObject::Test::Basic already performs most of the Class::PObject driver functionality.
SEE ALSO
AUTHOR
Sherzod B. Ruzmetov, <sherzodr@cpan.org>, http://author.handalak.com/
COPYRIGHT AND LICENSE
Copyright 2003 by Sherzod B. Ruzmetov.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.