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

Nik*_*nko 8 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
Run Code Online (Sandbox Code Playgroud)

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

PS:代码是这样的:

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

with 'My::Cool::Role';

has attr => ( ... );
Run Code Online (Sandbox Code Playgroud)

Sch*_*ern 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;
Run Code Online (Sandbox Code Playgroud)

并将问题报告给Test :: DeepTest :: Most.


Eth*_*her 5

你可以通过(例如)压制特定的出口:

use Test::Deep '!blessed';
Run Code Online (Sandbox Code Playgroud)