2012-12-28 89 views
3

我重構了一個構建於Test::Class上的測試套件,並且想要利用Moose的細微差別,如Roles,無論是在基本測試類中,還是在某些測試類在測試:: Class中使用Moose - 構造函數的問題

我曾嘗試:

雖然我從來沒有使用過任何這些MooseX模塊之前,不能肯定我正確地使用它們。在我所有的試驗我收到上運行的測試套件以下錯誤:

測試::類的內部似乎混淆。您是否在 子類中或通過多重繼承覆蓋new()?

產生這種故障Simple示例:

基礎測試類:

package My::Test::Class::Base; 

use Moose; 
use Test::Class::Most; 

1; 

測試類:

package Test::Package::Class; 

use Moose; 
use Test::Class::Most parent => 'My::Test::Class::Base'; 

sub blah : Tests() { 
    my $test = shift; 
    can_ok($test->class(), 'blah'); 
} 

1; 

類被測試:

package Package::Class; 

use Moose; 

sub blah { 
    my $self = shift; 
    return 1; 
} 

1; 

那麼,我做錯了什麼?

回答

2

這裏的問題是Test :: Class不希望你重寫它的new()構造函數,但是Moose就是這麼做的。人們不停地問我如何處理這個問題,所以我最近寫了Test::Class::Moose。它目前只在Github上,因爲它是alpha,但看起來相當合理。請注意,如Test::Class::Most,爲您提供了常用測試功能。

如果您嘗試它,請讓我知道並提供反饋,以便我可以更好地瞭解人們的需求。

如果你想要CPAN上的東西,有幾種選擇。

它使用MooseX::Declare。許多人不喜歡那樣。

你可能沒有找到直觀的語法,但它看起來像一個很好的模塊。

同樣的問題作爲測試::常規。

+0

是的,這就是爲什麼我正在用MooseX :: NonMoose等來試着讓駝鹿與Test :: Class構造函數很好的搭配。我會爲我自己的項目玩Test :: Class :: Moose,然後回覆你。這個問題是由$ work引發的;將該項目從Test :: Class遷移到另一個測試平臺將會與惰性和管理(爭取時間)做鬥爭。除非有骯髒的黑客才能得到Test :: Class和Moose的配合,否則我想我將成爲無角色 – beresfordt

+1

nickisfat:你可以使用我的[Role :: Basic](https://metacpan.org/模塊/角色::基本)模塊來獲取角色,當你沒有駝鹿或替代品。我承認我從來沒有對Role :: Basic的界面感到滿意,但是它應該做到這一點。 – Ovid