Wie kann ich Moose mit Test :: Klasse verwenden?
-
26-09-2019 - |
Frage
Ich bin Refactoring derzeit eine Testsuite von einem Kollegen aufgebaut und möchte Test::Class[::Most]
verwenden, während dies zu tun. Als ich begann, dachte ich heraus, dass ich wirklich ein paar Moose
Rollen zu entkoppeln Code ein wenig benutzen könnte. Es scheint jedoch, es nicht gut möglich ist - ich bekomme Fehlermeldungen wie diese:
Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at
/usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896
Die Frage ist also: Kann ich Moose
zusammen mit Test::Class
verwenden und wenn ja, wie
PS: Der Code lautet:
package My::Test::Class::Base;
use Moose;
use Test::Class::Most;
with 'My::Cool::Role';
has attr => ( ... );
Lösung
Test :: Tief (geladen via Test :: Die meisten über Test :: Class :: Most) ist eine eigene blessed
Export zusammen mit vielen anderen Sachen es sollte wohl nicht sein. Es ist nicht dokumentiert. Moose exportiert auch häufiger Scalar::Util::blessed
. Da Scalar::Util::blessed
ziemlich verbreitet ist, Test :: Tief sollte seinen eigenen unterschiedlichen blessed
nicht werden exportiert.
Leider gibt es keinen guten Weg, um es zu stoppen. Ich würde vorschlagen, in My :: Test :: Class :: Base den folgenden Hack zu tun:
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;
und Berichterstattung, das Problem zu Test :: Tief und Test :: Die meisten .
Andere Tipps
Sie können über bestimmte Exporte Squelch (zum Beispiel):
use Test::Deep '!blessed';
Ich habe gerade eine aktualisierte Version von Test :: Die meisten veröffentlicht. Wenn Sie 0.30 installieren, dieses Problem geht weg.
Die Leute diese Seite finden könnten auch wissen, über die verschiedenen Tests interessiert sein :: Class-Elch-Mashup-Module:
- Test :: Able
- Test :: Süße
- Test :: Class :: Moose (noch nicht auf CPAN )
Bei jeder dieser eine gewisse Menge an Refactoring würde required-- die Syntax variiert. Doch mit einem gewissen Menge an Suchen und ersetzen Sie einen ziemlich schnellen Übergang machen können können.