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おそらく本来あるべきではない他の多くのものと共に、それ自体をエクスポートしています。文書化されていません。Moose は、より一般的なScalar::Util::blessed. はかなり一般的であるためScalar::Util::blessed、Test::Deep は独自の異なる をエクスポートするべきではありませんblessed

残念ながら、それを止める良い方法はありません。My::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::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 に答える