Как я могу использовать Moose с Test :: Class? - PullRequest
8 голосов
/ 14 мая 2010

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

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

Ответы [ 4 ]

12 голосов
/ 14 мая 2010

Test :: Deep (загружается через Test :: Most через 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 .

5 голосов
/ 06 февраля 2012

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

use Test::Deep '!blessed';
3 голосов
/ 05 сентября 2012

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

1 голос
/ 17 декабря 2012

Людям, находящим эту страницу, также может быть интересно узнать о различных модулях Test :: Class-Moose mashup:

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

...