代码之家  ›  专栏  ›  技术社区  ›  Nikolai Prokoschenko

如何在Test::Class中使用Moose?

  •  8
  • Nikolai Prokoschenko  · 技术社区  · 16 年前

    我目前正在重构一个由同事构建的测试套件,并希望使用 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
    

    所以问题是:我能用吗 一起 Test::Class 如果是,怎么做?

    PS:代码如下:

    package My::Test::Class::Base;
    use Moose;
    use Test::Class::Most;
    
    with 'My::Cool::Role';
    
    has attr => ( ... );
    
    4 回复  |  直到 16 年前
        1
  •  12
  •   Schwern    16 年前

    blessed 再加上很多其他的东西,它可能不应该是。它没有记录在案。驼鹿也在出口更常见的食物 Scalar::Util::blessed . 自 标量::Util::0 是相当常见的,Test::Deep不应该导出自己不同的 有福的 .

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

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

        2
  •  5
  •   Ether    14 年前

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

    use Test::Deep '!blessed';
    
        3
  •  3
  •   Ovid    14 年前

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

        4
  •  1
  •   Mark Stosberg    13 年前

    找到此页面的人可能还想了解各种Test::Class Moose mashup模块: