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

时间:2010-05-14 17:45:52

标签: 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

所以问题是:我可以将MooseTest::Class一起使用,如果是,如何使用?

PS:代码是这样的:

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

with 'My::Cool::Role';

has attr => ( ... );

4 个答案:

答案 0 :(得分:12)

Test :: Deep(通过Test :: Most通过Test :: Class :: Most加载)正在导出自己的blessed以及它可能不应该的许多其他东西。它没有记录。穆斯还出口更常见的Scalar::Util::blessed。由于Scalar::Util::blessed相当常见,因此Test :: Deep不应导出自己的不同blessed

不幸的是,没有好办法阻止它。我建议在My :: 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::DeepTest::Most

答案 1 :(得分:5)

您可以通过(例如):

来压制特定的出口
use Test::Deep '!blessed';

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

任何这些都需要重构 - 语法会有所不同。通过一定程度的查找和替换,您可以进行相当快速的过渡。