Como posso usar alces com teste :: classe?
-
26-09-2019 - |
Pergunta
Atualmente, estou refatorando uma suíte de teste construída por um colega e gostaria de usar Test::Class[::Most]
Enquanto faz isso. Quando comecei, descobri que poderia realmente usar alguns Moose
Funções para desacoplar um pouco o código. No entanto, parece que não é bem possível - estou recebendo mensagens de erro como esta:
Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at
/usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896
Portanto, a pergunta é: posso usar Moose
junto com Test::Class
E se sim, como?
PS: O código é assim:
package My::Test::Class::Base;
use Moose;
use Test::Class::Most;
with 'My::Cool::Role';
has attr => ( ... );
Solução
Test :: Deep (carregado via teste :: mais via teste :: classe :: mais) está exportando seu próprio blessed
Junto com muitas outras coisas, provavelmente não deveria ser. Não está documentado. Moose também está exportando o mais comum Scalar::Util::blessed
. Desde Scalar::Util::blessed
é bastante comum, teste :: Deep não deve exportar seus próprios blessed
.
Infelizmente, não há uma boa maneira de detê -lo. Eu sugeriria no meu :: test :: classe :: base fazendo o seguinte hack:
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 relatar o problema para Teste :: Deep e Teste :: mais.
Outras dicas
Você pode reprimir as exportações específicas via (por exemplo):
use Test::Deep '!blessed';
Acabei de lançar uma versão atualizada do teste :: a maioria. Se você instalar 0.30, esse problema desaparecerá.
As pessoas que encontram esta página também podem estar interessadas em saber sobre os vários módulos de mashup de classe: Classe-Moose:
- Testável
- Teste :: doce
- Test :: Class :: Moose (ainda não no CPAN)
Com qualquer uma delas, seria necessária uma quantidade de refatoração- a sintaxe varia. No entanto, com uma quantidade de localização e substituição, você poderá fazer uma transição bastante rápida.