Использование Moose с Test :: Class - проблемы с конструктором

Я рефакторинг тестового набора, построенного на Test :: Class и хотел бы воспользоваться преимуществами Moose niceties как Роли , как в базовом тестовом классе, так и в некоторых тестовых классах

Я пытался:

  • Using MooseX::NonMoose in the base test class
  • Using MooseX::InsideOut in the base class
  • Setting make_immutable( inline_constructor => 0 );

Хотя я никогда не использовал ни один из этих MooseX до и не может быть уверен, что я правильно их использовал. Во всех моих испытаниях я получил следующую ошибку при запуске набора тестов:

Тест :: Внутренние элементы класса кажутся запутанными. Вы переопределили new() в   подкласс или через множественное наследование?

Простой образец, который производит этот отказ:

Базовый тестовый класс:

package My::Test::Class::Base;

use Moose;
use Test::Class::Most;

1;

Класс тестирования:

package Test::Package::Class;

use Moose;
use Test::Class::Most parent => 'My::Test::Class::Base';

sub blah : Tests() {
    my $test = shift;
    can_ok($test->class(), 'blah');
}

1;

Испытываемый класс:

package Package::Class;

use Moose;

sub blah {
    my $self = shift;
    return 1;
}

1;

Итак, что я делаю неправильно?

3
добавлено отредактировано
Просмотры: 1
de

1 ответы

Проблема здесь в том, что Test :: Class не хочет, чтобы вы переопределяли свой конструктор new (), но Moose делает именно это. Люди продолжают спрашивать меня, как с этим бороться, поэтому я недавно написал Test :: Class :: Moose </а>. В настоящее время это только на Github, потому что это альфа, но это кажется довольно разумным. Обратите внимание, что, как Test :: Class :: Most , общие функции тестирования для вас.

Если вы попробуете, пожалуйста, сообщите мне и предоставите отзывы, чтобы я мог лучше узнать, чего хотят люди.

Если вы хотите что-то в CPAN, есть несколько альтернатив.

Он использует MooseX :: Declare . Многим это не нравится.

Вы не можете найти синтаксис интуитивно понятным, но он кажется прекрасным модулем.

Такая же проблема, как Test :: Routine.

2
добавлено
nickisfat: вы можете использовать мой Role :: Basic модуль, чтобы получить роли, когда вы не имеют лося или альтернативы. Признаюсь, я никогда не был доволен интерфейсом Role :: Basic, но он должен сделать трюк.
добавлено автор Ovid, источник
Да, вот почему я скрепил с MooseX :: NonMoose и т. Д., Чтобы попытаться заставить лося хорошо разместить конструктор Test :: Class. У меня будет игра с Test :: Class :: Moose для моих собственных проектов и вернусь к вам. Однако этот вопрос был вызван $ work; перенос этого проекта из Test :: Class на другую тестовую платформу будет борьбой с инерцией и управлением (чтобы успеть сделать это). Если не будет грязного взлома, чтобы заставить Test :: Class и Moose сотрудничать, я думаю, что я буду непрактичным
добавлено автор beresfordt, источник