2010-05-14 26 views
8

Attualmente sto rifattorizzando una suite di test creata da un collega e vorrei usare Test::Class[::Most] mentre lo faccio. Come ho iniziato ho capito che potevo davvero usare un paio di ruoli Moose per disaccoppiare un po 'il codice. Tuttavia, sembra che non è del tutto possibile - Ricevo messaggi di errore come questo:Come posso usare Moose con Test :: Class?

Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at 
/usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896 

Quindi la domanda è: posso usare Moose insieme Test::Class e se sì, come?

PS: Il codice va in questo modo:

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

with 'My::Cool::Role'; 

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

Correlati: [Come posso prendere in giro gli oggetti Moose?] (Http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

C'è sempre Test :: Sweet, che è un framework di test OO basato su Alce. (Non è xUnit, perché usa i concetti esistenti di Moose invece di inventarne uno proprio.) – jrockway

+0

Ooh, T :: S sembra pulito. Bel lavoro lì. Non lo farò franca a $ lavoro, ma .... – darch

risposta

12

Test :: profonda (caricata tramite Test :: La maggior parte tramite Test :: :: Classe Most) è esportare il proprio blessed insieme a un sacco di altri roba che probabilmente non dovrebbe essere. Non è documentato. Moose sta anche esportando il più comune Scalar::Util::blessed. Poiché Scalar::Util::blessed è abbastanza comune, Test :: Deep non deve esportare il proprio diverso blessed.

Sfortunatamente, non c'è un buon modo per fermarlo. Io suggerirei a mio :: Test :: :: Base Class nel seguente modo trucco:

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; 

e segnalato il problema al Test::Deep e Test::Most.

+1

Credo sia inutile segnalare questo problema, dal momento che è stato segnalato quasi tre anni fa: https://rt.cpan.org/Public/Bug /Display.html?id=27699 Grazie per la soluzione, aggiungerò il mio commento a tale segnalazione. –

+1

Segnalalo a Test :: Most. Non deve esportare tutto da Test :: Deep. – Schwern

+1

Fatto così già: https://rt.cpan.org/Public/Bug/Display.html?id=57501 –

5

È possibile schiacciare le esportazioni particolare attraverso (per esempio):

use Test::Deep '!blessed'; 
3

Ho appena rilasciato una versione aggiornata di Test :: Most. Se installi 0.30, questo problema scompare.

1

Folks trovare questa pagina potrebbe anche essere interessati a conoscere i vari Test :: moduli mashup Classe-Moose:

Con una di queste quantità di refactoring sarebbe necessaria-- la sintassi varia. Tuttavia, con una certa quantità di ricerca e sostituzione, potresti essere in grado di effettuare una transizione abbastanza rapida.

+1

Per coloro che stanno cercando, al momento ho un alfa di [Test :: Class :: Moose su github] (https://github.com/Ovid/test-class-moose). – Ovid

+0

Test :: Class :: Moose è sul CPAN da anni. Avrei dovuto venire e menzionarlo. – Ovid

Problemi correlati