Test :: Class启动/设置继承的问题

时间:2011-02-22 03:22:54

标签: perl unit-testing testing inheritance

G'day,

我最近使用Test :: Class perl模块进行了一些测试并遇到了一个奇怪的问题。基本上,我有一个继承自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;

创建数据库并删除TWICE?一次为基类,一次为子类!如果没有解决方案是一个丑陋的黑客,你如何避免这种情况?

感谢。

编辑:我现在最接近优雅的是 -

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

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

sub actually_relevant_tests { } 

但要保持质疑,以获得更好的解决方案。

2 个答案:

答案 0 :(得分:1)

在您的基类中使用:

sub SKIP_CLASS { shift eq __PACKAGE__ }

这会在运行测试期间将Base::Class忽略为实际Test::Class,因此只会为Some::Class调用启动/关闭方法。

答案 1 :(得分:0)

你能消除一层继承层次结构吗?为什么不将设置和拆卸委托给辅助函数?

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; 
}