Moose を Test::Class で使用するにはどうすればよいですか?
-
26-09-2019 - |
質問
現在、同僚が構築したテストスイートをリファクタリングしており、使用したいと考えています 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 マッシュアップ モジュールについて知りたいと思うかもしれません。
- テスト::可能
- テスト::甘い
- テスト::クラス::ムース (まだ CPAN には含まれていません)
これらのいずれでも、ある程度のリファクタリングが必要になります。構文は異なります。ただし、ある程度の検索と置換を行うと、かなり迅速に移行できる場合があります。