質問

現在、同僚が構築したテストスイートをリファクタリングしており、使用したいと考えています 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を輸出するべきではありません。

残念ながら、それを停止するためには良い方法はありません。私は、以下のハックをやっマイ::テスト::クラス::ベースにお勧めしたい。

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