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 => ( ... );
War es hilfreich?

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:

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top