Проблемы с Test :: Class запуска / настройки наследования - PullRequest
2 голосов
/ 22 февраля 2011

G'day,

Недавно я использовал perl-модуль Test :: Class для некоторого тестирования и столкнулся со странной проблемой.По сути, у меня есть базовый класс, унаследованный от Test :: Class

package Base::Class;
use base qw(Test::Class);

setup : Test(startup) {
    # Create a DB from scratch
}

teardown : Test(shutdown) {
    # DROP database 
}

А затем у меня есть целая куча тестовых классов, наследующих этот базовый класс,

package Some::Class;
use base qw(Base::Class);

sub actually_relevant_tests { }

Но когда я запускаюмой тестовый скрипт:

use Some::Class;

Test::Class->runtests;

БД создается и сбрасывается ДВАЖДЫ?Один раз для базового класса и один раз для подкласса!Как избежать этого, если решение не будет уродливым?

Спасибо.

Редактировать: Самая близкая вещь к элегантности, которая у меня сейчас есть, -

use Test::Class;
my $object = Some::Class->new();
Test::Class->runtests($object);

package Some::Class;
use Base::Class;

sub actually_relevant_tests { } 

Но вопрос остается открытым для лучших решений.

Ответы [ 2 ]

1 голос
/ 14 июля 2011

В вашем базовом классе используйте:

sub SKIP_CLASS { shift eq __PACKAGE__ }

Это игнорирует Base::Class во время тестов как резкий Test::Class, и соответственно методы запуска / выключения будут вызываться только для Some::Class.

0 голосов
/ 22 февраля 2011

Можете ли вы исключить слой иерархии наследования? Почему бы не делегировать настройку и демонтаж вспомогательным функциям?

package My::DB::Helpers;

sub setup_db {...}

sub teardown_db {...}

, а затем

package Some::Class;
use My::DB::Helpers;
use base 'Test::Class';

setup : Test(startup) {
    My::DB::Helpers::setup_db;
}

teardown : Test(shutdown) {
    My::DB::Helpers::teardown_db; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...