2010-05-14 13 views
8

Actualmente estoy refaccionando un conjunto de pruebas creado por un colega y me gustaría usar Test::Class[::Most] mientras lo hago. Cuando comencé, me di cuenta de que realmente podía usar un par de roles de Moose para desacoplar el código un poco. Sin embargo, parece que no es muy posible - que estoy recibiendo mensajes de error como éste:¿Cómo puedo usar Moose with 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 

Así que la pregunta es: ¿puedo usar Moose junto con Test::Class y si es así, ¿cómo?

PS: El código es el siguiente:

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

with 'My::Cool::Role'; 

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

Relacionado: [¿Cómo puedo simular objetos de Moose?] (Http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

Siempre hay Test :: Sweet, que es un marco de prueba OO basado en Moose. (No es xUnit, porque usa los conceptos existentes de Moose en lugar de inventar el suyo.) – jrockway

+0

Ooh, T :: S se ve bien. Buen trabajo allí. No se saldrá con la suya en $ job, pero ... – darch

Respuesta

12

Test :: profunda (cargado a través de la prueba :: Más través de Test :: Clase :: Más) está exportando su propia blessed junto con una gran cantidad de otra cosas que probablemente no deberían ser No está documentado. Moose también está exportando el más común Scalar::Util::blessed. Como Scalar::Util::blessed es bastante común, Test :: Deep no debería exportar sus propios blessed.

Desafortunadamente, no hay una buena manera de detenerlo. Yo sugeriría Mi :: Prueba :: :: Clase Base de hacer este truco:

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; 

y reportar el problema a Test::Deep y Test::Most.

+1

Supongo que no sirve de nada informar este problema, ya que se informó hace casi tres años: https://rt.cpan.org/Public/Bug /Display.html?id=27699 Gracias por su solución, agregaré mi comentario a ese informe de errores. –

+1

Informar a Test :: Most. No tiene que exportar todo de Test :: Deep. – Schwern

+1

Hecho ya: https://rt.cpan.org/Public/Bug/Display.html?id=57501 –

5

Puede sofocar las exportaciones particular a través de (por ejemplo):

use Test::Deep '!blessed'; 
3

Acabo de liberar una versión actualizada de la prueba :: Más. Si instala 0.30, este problema desaparece.

1

gente encontrar esta página también podría estar interesado en saber acerca de la prueba varios módulos :: mashup Clase-alces:

Con cualquiera de estos se requerirá una cierta cantidad de refactorización, la sintaxis varía. Sin embargo, con una cierta cantidad de buscar y reemplazar, es posible que pueda hacer una transición bastante rápida.

+1

Para aquellos que están buscando, actualmente tengo un alfa de [Test :: Class :: Moose en github] (https://github.com/Ovid/test-class-moose). – Ovid

+0

Prueba :: Clase :: Moose ha estado en el CPAN durante años. Debería haber venido y haber mencionado eso. – Ovid

Cuestiones relacionadas