2010-05-14 60 views
8

我目前正在重構由同事建立的測試套件,並希望在這樣做時使用Test::Class[::Most]。當我開始時,我發現我真的可以使用幾個Moose角色來解碼代碼。然而,現在看來,這是不太可能的 - 我收到錯誤消息像這樣的:如何在Test :: Class中使用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 

所以,問題是:我可以同時使用MooseTest::Class如果是這樣,怎麼樣?

PS:該代碼是這樣的:

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

with 'My::Cool::Role'; 

has attr => (...); 
+0

相關:[我如何模擬駝鹿對象?](http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether 2010-05-14 19:28:13

+2

總是有Test :: Sweet,它是基於駝鹿的OO測試框架。 (它不是xUnit,因爲它使用了Moose現有的概念,而不是發明自己的概念。) – jrockway 2010-05-15 03:12:13

+0

Ooh,T :: S看起來很整齊。那裏幹得不錯。在$ job中不會失去它,但是...... – darch 2010-05-16 00:01:21

回答

12

測試::深(通過測試加載::多數通過測試::類::大部分)是出口自己的blessed與很多其他一起它可能不應該是。它沒有記錄。駝鹿也出口更常見的Scalar::Util::blessed。由於Scalar::Util::blessed相當常見,因此Test :: Deep不應該導出自己的不同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; 

和報告的問題Test::DeepTest::Most

+1

我猜這是沒有用的,因爲它已經在三年前報告過了:https://rt.cpan.org/Public/Bug /Display.html?id=27699 感謝您的解決方法,我會將該評論添加到該錯誤報告中。 – 2010-05-14 20:25:57

+1

報告給Test :: Most。它不必從Test :: Deep中導出所有內容。 – Schwern 2010-05-17 02:59:11

+1

已經完成了:https://rt.cpan.org/Public/Bug/Display.html?id=57501 – 2010-05-17 06:28:48

5

您可以通過壓制(例如)特定出口:

use Test::Deep '!blessed'; 
3

我剛剛發佈測試::熱門的更新版本。如果你安裝0.30,這個問題就會消失。

1

鄉親找到這個頁面可能也有興趣瞭解各種測試::類駝鹿混搭模塊:

任何這些重構都需要 - 語法會有所不同。 HOwever,有一定數量的查找和替換,你可能能夠做出相當快的過渡。

+1

對於那些正在尋找的人,我目前有一個[Test :: Class :: Moose on github]的alpha, (https://github.com/Ovid/test-class-moose)。 – Ovid 2012-12-28 13:43:15

+0

Test :: Class :: Moose多年來一直在CPAN上工作。我應該前來提及這一點。 – Ovid 2015-05-14 14:26:52

相關問題