Comment puis-je utiliser Moose avec Test :: Class?
-
26-09-2019 - |
Question
Je refactorisation actuellement une suite de test construit par un collègue et je voudrais utiliser Test::Class[::Most]
en le faisant. Comme je l'ai commencé, je pensais que je pouvais vraiment utiliser deux rôles Moose
au code découpler un peu. Cependant, il semble que ce n'est pas tout à fait possible - je reçois des messages d'erreur comme celui-ci:
Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at
/usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896
La question est: puis-je utiliser Moose
avec Test::Class
et si oui, comment
PS: Le code va comme ceci:
package My::Test::Class::Base;
use Moose;
use Test::Class::Most;
with 'My::Cool::Role';
has attr => ( ... );
La solution
Test :: profond (chargé par Test :: Test :: La plupart via Class :: La plupart) exporte son propre blessed
avec beaucoup d'autres choses, il ne devrait probablement pas être. Ce ne est pas documenté. Moose exporte aussi Scalar::Util::blessed
plus commune. Depuis Scalar::Util::blessed
est assez commun, Test :: profond ne doit pas être l'exportation de ses différents blessed
.
Malheureusement, il n'y a pas de bonne façon de l'arrêter. Je suggère à mon :: Test :: Class :: Base de faire le hack suivant:
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;
et signaler le problème à Test :: profond et test :: La plupart .
Autres conseils
Vous pouvez squelch particulier les exportations via (par exemple):
use Test::Deep '!blessed';
Je viens de publier une version mise à jour du test :: Most. Si vous installez 0,30, ce problème disparaît.
Les gens trouver cette page pourrait également être intéressé de connaître les différents Test :: Class-Moose mashup modules:
- Test :: Capable
- Test :: doux
- Test :: Class :: Moose (pas encore sur CPAN )
Avec l'un de ces une certaine quantité de refactoring serait required-- la syntaxe varie. Cependant, avec une certaine quantité de découverte et de remplacement, vous pourrez peut-être faire une transition assez rapide.