Perl 如何将Moose与Test::Class一起使用?

Perl 如何将Moose与Test::Class一起使用?,perl,moose,test-class,Perl,Moose,Test Class,我目前正在重构一位同事构建的测试套件,并希望在重构过程中使用test::Class[::Most]。当我开始时,我发现我真的可以使用几个Moose角色来稍微解耦代码。然而,这似乎不太可能——我收到了如下错误消息: Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at /usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896 所以问题是:我可以将Moo

我目前正在重构一位同事构建的测试套件,并希望在重构过程中使用
test::Class[::Most]
。当我开始时,我发现我真的可以使用几个
Moose
角色来稍微解耦代码。然而,这似乎不太可能——我收到了如下错误消息:

Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at
/usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896
所以问题是:我可以将
Moose
Test::Class
一起使用吗?如果可以,如何使用

PS:代码如下所示:

package My::Test::Class::Base;
use Moose;
use Test::Class::Most;

with 'My::Cool::Role';

has attr => ( ... );
Test::Deep(通过Test::Most通过Test::Class::Most加载)正在导出它自己的
和许多其他可能不应该的东西。它没有记录在案。Moose也在输出更常见的
标量::Util::祝福
。由于
Scalar::Util::brized
相当常见,因此Test::Deep不应该导出自己的不同
brized

不幸的是,没有好办法阻止它。我建议在我的::Test::Class::Base中执行以下hack:

package My::Test::Class::Base;

# Test::Class::Most exports Test::Most exports Test::Deep which exports
# an undocumented blessed() which clashes with Moose's blessed().
BEGIN {
    require Test::Deep;
    @Test::Deep::EXPORT = grep { $_ ne 'blessed' } @Test::Deep::EXPORT;
}

use Moose;
use Test::Class::Most;

并向和报告问题。

您可以通过(例如):


我刚刚发布了Test::Most的更新版本。如果您安装了0.30,这个问题就会消失。

找到此页面的人可能也有兴趣了解各种Test::Class Moose mashup模块:

  • (尚未在CPAN上发布)

对于其中任何一种,都需要进行一定量的重构——语法各不相同。然而,通过一些find和replace操作,您可能能够进行相当快的转换

相关:总是有Test::Sweet,这是一个基于Moose的OO测试框架。(它不是xUnit,因为它使用了驼鹿现有的概念,而不是自己发明的。)哦,T::s看起来很整洁。干得好。在$job的时候不会得逞,但是……我想报告这个问题是没有用的,因为它已经被报告了将近三年了:谢谢你的解决方法,我将把我的评论添加到bug报告中。报告给Test::Most。它不必从Test::Deep导出所有内容。对于那些正在寻找的人来说,我目前有一个alpha。Test::Class::Moose已经在CPAN上运行多年了。我应该来提一下。
use Test::Deep '!blessed';