我目前正在重构由同事构建的测试套件,并希望使用 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 如果是这样,怎么办?

附:代码如下:

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

with 'My::Cool::Role';

has attr => ( ... );
有帮助吗?

解决方案

测试::深(经测试::类::多数通过测试::热门下载)是一个有很多其他的东西,它可能不应该是沿着出口自己的blessed。它不记录。穆斯还出口较常见的Scalar::Util::blessed。由于Scalar::Util::blessed是相当普遍的,测试::深不应该出口自己不同的blessed

不幸的是,有没有什么好办法来阻止它。我建议在我::测试::类:: Base的做下面的技巧:

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;

和报告问题来测试::深测试::热门

其他提示

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

use Test::Deep '!blessed';

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

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

对于其中任何一个,都需要进行一定程度的重构——语法各不相同。然而,通过一定量的查找和替换,您可能能够进行相当快速的转换。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top