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 { }
但要保持质疑,以获得更好的解决方案。
答案 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;
}