8

我目前正在重构由一位同事构建的测试套件,并希望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 => ( ... );
4

4 回答 4

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

于 2010-05-14T19:29:55.060 回答
5

您可以通过(例如)压制特定的导出:

use Test::Deep '!blessed';
于 2012-02-06T19:12:31.743 回答
3

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

于 2012-09-05T09:36:07.667 回答
1

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

对于这些中的任何一个,都需要进行一些重构——语法会有所不同。然而,通过一些查找和替换,您可能能够进行相当快速的转换。

于 2012-12-17T13:56:36.907 回答