Come posso usare Moose con Test :: Class?
-
26-09-2019 - |
Domanda
Al momento sto refactoring una suite di test costruito da un collega e vorrei utilizzare Test::Class[::Most]
mentre farlo. Come ho iniziato ho capito che potrei davvero utilizzare un paio di ruoli Moose
in codice disaccoppiare un po '. Tuttavia, sembra che non è del tutto possibile - Ricevo messaggi di errore come questo:
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 => ( ... );
Soluzione
Test :: profonda (caricata tramite Test :: La maggior parte tramite Test :: :: Classe Most) sta esportando il proprio blessed
insieme a un sacco di altre cose che probabilmente non dovrebbe essere. La sua non è documentato. Moose è anche esportando il Scalar::Util::blessed
più comune. Dal momento che Scalar::Util::blessed
è abbastanza comune, Test :: profonda non deve essere esportando il proprio blessed
diversa.
Purtroppo, non c'è 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 a Test :: profonda e test :: La maggior parte .
Altri suggerimenti
È possibile schiacciare le esportazioni particolare attraverso (per esempio):
use Test::Deep '!blessed';
Ho appena rilasciato una versione aggiornata di Test :: Most. Se si installa 0.30, questo problema va via.
La gente che trovano questa pagina potrebbe anche essere interessato a conoscere i vari Test :: Class-Moose mashup moduli:
- Test :: In grado
- Test :: dolce
- Test :: :: Classe Moose (non ancora su CPAN )
Con uno qualsiasi di questi una certa quantità di refactoring avrebbe required-- la sintassi varia. Tuttavia, con una certa quantità di ritrovamento e sostituzione si può essere in grado di effettuare una transizione abbastanza veloce.