2010-05-14 12 views
8

Ich überarbeite gerade eine Testsuite, die von einem Kollegen erstellt wurde und möchte dabei Test::Class[::Most] verwenden. Als ich anfing, fand ich heraus, dass ich wirklich ein paar Moose Rollen verwenden konnte, um den Code ein wenig zu entkoppeln. Es scheint jedoch, es nicht gut möglich ist - ich bekomme Fehlermeldungen wie diese:Wie kann ich Moose mit Test :: Class verwenden?

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

Related: [Wie kann ich Moose Objekte verspotten?] (Http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

Es gibt immer Test :: Sweet, was ist ein Moose-basiertes OO-Testframework. (Es ist nicht xUnit, weil es die vorhandenen Konzepte von Moose verwendet, anstatt seine eigene zu erfinden.) – jrockway

+0

Ooh, T :: S sieht ordentlich aus. Gute Arbeit dort. Ich komme damit bei $ job nicht durch, aber .... – darch

Antwort

12

Test :: Tief (via-Test geladen :: am meisten über Test :: Class :: Most) ist eine eigene blessed zusammen mit einer Menge anderer ausführender Zeug sollte es wahrscheinlich nicht sein. Es ist nicht dokumentiert. Elche exportiert auch die häufiger Scalar::Util::blessed. Da Scalar::Util::blessed ziemlich häufig ist, sollte Test :: Deep nicht seine eigenen blessed exportieren.

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::Deep und Test::Most.

+1

Ich denke, es bringt nichts, dieses Problem zu melden, da es vor fast drei Jahren gemeldet wurde: https://rt.cpan.org/Public/Bug /Display.html?id=27699 Vielen Dank für Ihre Problemumgehung, ich werde meinen Kommentar zu diesem Fehlerbericht hinzufügen. –

+1

Melden Sie es zu Test :: Most. Es muss nicht alles von Test :: Deep exportiert werden. – Schwern

+1

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

5

können Sie insbesondere die Exporte über (zum Beispiel) Squelch:

use Test::Deep '!blessed'; 
3

Ich habe gerade eine aktualisierte Version von Test :: Die meisten veröffentlicht. Wenn Sie 0.30 installieren, verschwindet dieses Problem.

1

Leute diese Seite finden könnten auch interessiert sein über die verschiedenen Test :: Class-Elch-Mashup-Module kennen:

Mit jeder von diesen einige Menge von Refactoring wäre erforderlich - die Syntax variiert. Mit einigem Suchen und Ersetzen können Sie vielleicht einen ziemlich schnellen Übergang machen.

+1

Für diejenigen, die suchen, habe ich derzeit ein Alpha von [Test :: Class :: Moose auf GitHub] (https://github.com/Ovid/test-class-moose). – Ovid

+0

Test :: Class :: Moose ist seit Jahren auf der CPAN. Ich hätte mitkommen sollen und das erwähnt. – Ovid

Verwandte Themen