2010-05-14 2 views
8

В настоящее время я реорганизую тестовый пакет, созданный коллегой, и при этом хочу использовать Test::Class[::Most]. Когда я начал, я понял, что могу реально использовать пару ролей Moose, чтобы немного развязать код. Тем не менее, мне кажется, что это не вполне возможно, - я получаю сообщение об ошибке, как это:Как я могу использовать Moose с Test :: 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 

Таким образом, вопрос: могу ли я использовать Moose вместе с Test::Class и если да, то как?

PS: Код выглядит следующим образом:

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

with 'My::Cool::Role'; 

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

Связанный: [Как я могу издеваться над Moose-объектами?] (Http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

Всегда есть Test :: Sweet, который основанную на лосях платформу тестирования OO. (Это не xUnit, потому что он использует существующие концепции Moose вместо того, чтобы изобретать свои собственные.) – jrockway

+0

Ooh, T :: S выглядит аккуратно. Хорошая работа там. Не уйдет с этим на $ job, но .... – darch

ответ

12

Test :: Deep (загружается через Test :: Часто с помощью Test :: Class :: Most) экспортирует свою собственную blessed наряду с множеством других Наверное, этого не должно быть. Его не документировано. Moose также экспортирует более распространенный Scalar::Util::blessed. Поскольку Scalar::Util::blessed довольно распространен, Test :: Deep не должен экспортировать свои собственные разные blessed.

К сожалению, нет никакого способа остановить его. Я хотел бы предложить в My :: Test :: Class :: Base делает следующий хак:

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; 

и отчетности о проблеме Test::Deep и Test::Most.

+1

Я думаю, что бесполезно сообщать об этой проблеме, поскольку это было сообщено почти три года назад: https://rt.cpan.org/Public/Bug /Display.html?id=27699 Спасибо за обходной путь, я добавлю свой комментарий к этому отчету об ошибке. –

+1

Сообщить об этом в Test :: Most. Он не должен экспортировать все из Test :: Deep. – Schwern

+1

Сделано так: https://rt.cpan.org/Public/Bug/Display.html?id=57501 –

5

Вы можете хлюпать конкретный экспорт через (например):

use Test::Deep '!blessed'; 
3

Я только что выпустил обновленную версию Test :: Most. Если вы установите 0.30, этот вопрос исчезнет.

1

Folks устанавливающего этой страницы также может быть интересно узнать о различных испытаниях :: модулях коллажей класса Moose:

С любым из них потребуется некоторое количество рефакторинга - синтаксис меняется. Тем не менее, с некоторым количеством поиска и замены вы можете сделать довольно быстрый переход.

+1

Для тех, кто ищет, у меня в настоящее время есть альфа [Test :: Class :: Moose on github] (https://github.com/Ovid/test-class-moose). – Ovid

+0

Test :: Class :: Moose уже много лет работает в CPAN. Я должен был прийти и упомянуть об этом. – Ovid