¿Cómo puedo usar con Moose Test :: Clase?
-
26-09-2019 - |
Pregunta
Actualmente estoy refactorización un conjunto de pruebas construido por un colega y me gustaría utilizar Test::Class[::Most]
mientras lo hace. A medida que empecé me di cuenta de que realmente podría usar un par de papeles Moose
al código desacoplar un poco. Sin embargo, parece que no es muy posible - Estoy recibiendo mensajes de error como el siguiente:
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 => ( ... );
Solución
Test :: profunda (cargado a través de la prueba :: Más través de Test :: Clase :: Más) está exportando su propio blessed
junto con un montón de otras cosas que probablemente no debería ser. No es documentado. Moose también exporta el Scalar::Util::blessed
más común. Desde Scalar::Util::blessed
es bastante común, Test :: profunda no debe exportando su propia blessed
diferente.
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;
e informar del problema a Test :: profundo y Prueba :: más .
Otros consejos
Puede sofocar las exportaciones particular a través de (por ejemplo):
use Test::Deep '!blessed';
He acaba de lanzar una versión actualizada de la prueba :: Más. Si instala 0.30, este problema desaparece.
La gente la búsqueda de esta página también podría estar interesado en saber acerca de los diversos Test :: Clase-Moose mashup módulos:
- Test :: Capaz
- Test :: dulce
- Test :: Clase :: Moose (aún no en CPAN )
Con cualquiera de estos algunos cantidad de refactorización sería required-- la sintaxis varía. Sin embargo, con cierta cantidad de de buscar y reemplazar puede ser capaz de hacer una transición bastante rápida.