2010-05-14 20 views
8

Obecnie dokonuję refaktoryzacji zestawu testowego opracowanego przez kolegę i chciałbym podczas tego używać Test::Class[::Most]. Kiedy zacząłem, odkryłem, że mogę naprawdę użyć kilku ról, aby oddzielić trochę kod od Moose. Wydaje się jednak, że nie jest całkiem możliwe - Dostaję komunikaty o błędach, takich jak ten:Jak używać łosia z Testem :: 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 

Więc pytanie brzmi: czy mogę użyć Moose wraz z Test::Class a jeśli tak, to w jaki sposób?

PS: Kod wygląda tak:

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

with 'My::Cool::Role'; 

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

Powiązane: [Jak wyśmiać obiekty na Moose?] (Http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

Zawsze jest Test :: Sweet, który jest oparte na Moose środowisko testowania OO. (To nie jest xUnit, ponieważ wykorzystuje istniejące koncepcje Moose'a zamiast wymyślać własne). – jrockway

+0

Ooh, T :: S wygląda schludnie. Dobra robota. Nie uniknę go za $ pracy, ale ... – darch

Odpowiedz

12

testowy :: Głębokie (ładowany poprzez test :: Popularne poprzez test :: Klasy :: Most) eksportuje własną blessed wraz z wieloma innymi rzeczy, które prawdopodobnie nie powinny być. Nie jest to udokumentowane. Łoś eksportuje również bardziej popularne Scalar::Util::blessed. Ponieważ Scalar::Util::blessed jest dość powszechny, Test :: Deep nie powinien eksportować swojego własnego blessed.

Niestety, nie ma dobrego sposobu, aby to zatrzymać. Sugeruję Moje :: test :: :: Base Class robi następującą Hack:

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; 

i zgłoszenie problemu do Test::Deep i Test::Most.

+1

Zgaduję, że nie ma sensu zgłaszanie tego problemu, ponieważ zostało zgłoszone prawie trzy lata temu: https://rt.cpan.org/Public/Bug /Display.html?id=27699 Dzięki za obejście, dodam mój komentarz do tego raportu o błędzie. –

+1

Zgłoś to do testu :: większość. Nie musi eksportować wszystkiego z Test :: Deep. – Schwern

+1

Sporządzono już: https://rt.cpan.org/Public/Bug/Display.html?id=57501 –

5

Można squelch szczególnych eksportu przez (na przykład):

use Test::Deep '!blessed'; 
3

Właśnie wydała zaktualizowaną wersję testu :: Most. Jeśli zainstalujesz 0.30, ten problem zniknie.

1

Folks znalezienie tej strony może być także zainteresowany, aby wiedzieć na temat różnych modułów testowych :: mashup klasy Moose:

Przy każdym z tych elementów wymagana byłaby pewna ilość refaktoryzacji - składnia jest różna. HOWerver z pewną ilością znalezienia i zastąpienia może być w stanie dokonać dość szybkiego przejścia.

+1

Dla tych, którzy szukają, obecnie mam alfa [Test :: Class :: Moose na github] (https://github.com/Ovid/test-class-moose). – Ovid

+0

Test :: Class :: Moose jest na CPAN od lat. Powinienem był o tym wspomnieć. – Ovid

Powiązane problemy