2010-05-14 5 views
8

Je suis en train de refactoriser une suite de tests créée par un collègue et j'aimerais utiliser Test::Class[::Most] en même temps. Comme j'ai commencé j'ai compris que je pourrais vraiment utiliser un couple de rôles Moose pour découpler le code un peu. Cependant, il semble que ce n'est pas tout à fait possible - Je reçois des messages d'erreur comme celui-ci:Comment puis-je utiliser Moose avec 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 

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 => (...); 
+0

En relation: [Comment puis-je imiter les objets Moose?] (Http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

Il y a toujours Test :: Sweet, qui est un cadre de test d'OO basé sur l'orignal. (Ce n'est pas xUnit, parce qu'il utilise les concepts existants de Moose au lieu d'inventer le sien.) – jrockway

+0

Ooh, T :: S semble soigné. Beau travail là-bas. Je ne vais pas m'en tirer avec $ job, mais ... – darch

Répondre

12

Test :: Profonde (chargé par Test :: Test :: La plupart via Class :: La plupart) exporte son propre blessed ainsi que beaucoup d'autres choses qu'il ne devrait probablement pas être. Ce n'est pas documenté. Moose exporte également le plus commun Scalar::Util::blessed. Puisque Scalar::Util::blessed est assez commun, Test :: Deep ne devrait pas exporter son propre blessed différent.

Malheureusement, il n'y a pas de bon moyen 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::Deep et Test::Most.

+1

Je suppose qu'il ne sert à rien de signaler ce problème, car il a été rapporté il y a presque trois ans: https://rt.cpan.org/Public/Bug /Display.html?id=27699 Merci pour votre solution de contournement, j'ajouterai mon commentaire à ce rapport de bogue. –

+1

Signaler à Test :: Most. Il n'est pas nécessaire d'exporter tout depuis Test :: Deep. – Schwern

+1

Déjà fait: https://rt.cpan.org/Public/Bug/Display.html?id=57501 –

5

Vous pouvez squelch particulier les exportations via (par exemple):

use Test::Deep '!blessed'; 
3

Je viens de publier une version mise à jour du test :: Most. Si vous installez 0.30, ce problème disparaît.

1

Folks trouver cette page pourraient aussi être intéressés de connaître les différents tests :: modules de mashup classe Moose:

Avec l'un de ces éléments, une certaine quantité de refactoring serait requise - la syntaxe varie. Cependant, avec une certaine quantité de trouver-et-remplacer, vous pouvez être en mesure de faire une transition assez rapide.

+1

Pour ceux qui cherchent, j'ai actuellement un alpha de [Test :: Class :: Moose sur github] (https://github.com/Ovid/test-class-moose). – Ovid

+0

Test :: Class :: Moose est membre du CPAN depuis de nombreuses années. J'aurais dû venir et mentionné cela. – Ovid

Questions connexes