Projekt

Allgemein

Profil

Herunterladen (1,96 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::BackgroundJob::SelfTest::Base;

use strict;

use Test::Builder;

use parent qw(Rose::Object);

use Rose::Object::MakeMethods::Generic (
'scalar --get_set_init' => 'tester',
);

sub run {
my ($self) = @_;
die 'needs to be overwritten';
}

sub todo {
0
}

sub skipped {
0
}


sub init_tester {
Test::Builder->new;
}

1;

__END__

=encoding utf-8

=head1 NAME

SL::BackgroundJob::SelfTests::Base - Base class for background job self tests.

=head1 SYNOPSIS

# in self test:
use parent qw(SL::BackgroundJob::SelfTests::Base);

# optionally use a different tester
sub init_tester {
Test::Deeply->new;
}

# implement interface
sub run {
my $self = shift;

$self->tester->plan(tests => 1);

$self->tester->ok($value_from_database == $expected_value, 'short explanation');
}

=head1 DESCRIPTION

This is a base class for self tests.

=head1 INTERFACE

Your class will inherit L<Rose::Object> so you can use the class building utils
from there, and won't need to worry about writing a new constructor.

Your test will be instanciated and the run method will be invoked. The output
of your tester object will be collected and processed.

=head2 THE TESTER

=over 4

=item C<tester>

=item C<init_tester>

If you don't bother overriding C<init_tester>, your test will use a
L<Test::More> object by default. Any other L<Test::Builder> object will do.

The TAP output of your builder will be collected and processed for further handling.

=back

=head1 ERROR HANDLING

If a self test module dies, it will be recorded as failed, and the bubbled
exception will be used as diagnosis.

=head1 TODO

It is currently not possible to indicate if a test skipped (indicating no actual testing was done but it wasn't an error) nor returning a todo status (indicating that the test failed, but that being ok, because it's a todo).

Stub methods "todo" and "skipped" exist, but are currently not used.

=head1 AUTHOR

Sven Schoeling E<lt>s.schoeling@linet-services.deE<gt>

=cut
(1-1/3)