| Class-PObject documentation | Contained in the Class-PObject distribution. |
Class::PObject::Test - Base test framework for Class::PObject drivers
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
}
Class::PObject::Test is a base testing framework for Class::PObject drivers.
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().
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 created 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.
new($driver, $datasource) - constructor method. Accepts two arguments,
$driver and $datasource. You can access these object attributes from within
run() 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)
}
For author and copyright information refer to Class::PObject's online manual.
| Class-PObject documentation | Contained in the Class-PObject distribution. |
package Class::PObject::Test; # Test.pm,v 1.5 2005/02/20 18:05:00 sherzodr Exp use strict; #use diagnostics; use Carp; use Class::PObject; use vars ('$VERSION'); $VERSION = '1.02'; sub new { my $class = shift; $class = ref($class) || $class; my $self = bless { driver => $_[0], # || 'file', datasource => $_[1] # || 'data' }, $class; unless ( $self->{driver} && $self->{datasource} ) { croak "'driver' and 'datasource' are not set in the test script"; } return $self; } sub run { my $self = shift; croak "You should override run() method in your test class"; } 1; __END__ # Below is stub documentation for your module. You'd better edit it!