среда, 2 сентября 2009 г.

Unit тесты в perl

Настоящему программисту должно быть пофиг на чем писать, главное следовать концепциям. Одной из важнейших я считаю TDD. Начав проект на перле, сразу полез искать имплементацию JUnit на перле. Таковым стали модули Test::Unit::TestCase, Test::Unit::TestSuite и Test::Unit::TestRunner

Сначала напишем TestCase

package SipPaymentTest;
use strict;
use base qw(Test::Unit::TestCase);

sub new {
my $self = shift()->SUPER::new(@_);
return $self;
}

sub set_up {
my $self = shift;
}

sub test_some_feature {
my $self = shift;
$self->assert(0);
}


Написав несколько случаев тестирования, нужен и инструмент запуска тестов:

%cat run.pl
#!/usr/bin/perl

use Test::Unit::TestRunner;
use Test::Unit::TestSuite;

require "lib/config.pl";
require "lib/aub.pl";
require "aubtest.pl";
require "nopaymenttest.pl";
require "sippaymenttest.pl";
require "sipprotocoltest.pl";

my $test = shift;
my $runner = Test::Unit::TestRunner->new();

my $suite = Test::Unit::TestSuite->empty_new("AUB Payment Terminal Test Suite");

if (!$test || $test eq 'AUB') {
$suite->add_test(Test::Unit::TestSuite->new('AUBTest'));
}
if (!$test || $test eq 'NoPayment') {
$suite->add_test(Test::Unit::TestSuite->new('NoPaymentTest'));
}
if (!$test || $test eq 'SipPayment') {
$suite->add_test(Test::Unit::TestSuite->new('SipPaymentTest'));
}
if (!$test || $test eq 'SipProtocol') {
$suite->add_test(Test::Unit::TestSuite->new('SipProtocolTest'));
}
my $result;
$runner->do_run($suite, 0);


Такой инструмент можно использовать для запуска как одиночных тестов, так и все сразу

%./run.pl NoPayment
........
Time: 1 wallclock secs ( 0.46 usr + 0.03 sys = 0.49 CPU)

OK (8 tests)
%./run.pl
..............F..........
Time: 6 wallclock secs ( 1.32 usr + 0.12 sys = 1.44 CPU)

!!!FAILURES!!!
Test Results:
Run: 24, Failures: 1, Errors: 0

There was 1 failure:
1) sippaymenttest.pl:50 - test_pay(SipPaymentTest)
'2009-09-03 13:07:16.427436' did not match /(?-xism:2009-11-22)/

Test was not successful.

Комментариев нет: