Как я могу издеваться над Moose-объектами?

Какие стратегии используют люди Perl, когда они издеваются над Moose-объектами, которые они будут вводить в другие объекты Moose как атрибуты с ограничениями типа?

Test:: MockObject:: Extends, похоже, не очень хорошо работает с Moose. Мне нужно, чтобы объект был благословлен как конкретный пакет, хотя ванильный тест:: MockObject не будет работать. Я уверен, что у других людей была схожая проблема. Как вы его разрешили?

Дополнительные точки для решений, которые уже находятся в CPAN.

Ответ 1

Ну, я не специалист по таким вещам, но первое, на что я бы посмотрел, это Шоу Мур (Sartak) Test-MockOO.

Если это не сработает для вас, я бы посмотрел на использование возможностей протокола Metaobject и запуск вручную создания объектов Mock. Посмотрите класс:: MOP:: Class и Moose:: Meta:: Class для переопределения определенных методов и/или создания целых классов во время выполнения программно.

Если это все еще не сработает для вас, я прохожу мимо IRC и спрашиваю. Лошади-накидки лося болтаются там, и я уверен, что один из них столкнулся с этой ситуацией.

Ответ 2

бит самозапуска, но я написал http://search.cpan.org/~cycles/Test-Magpie-0.05/lib/Test/Magpie.pm, может быть, вы найдете это полезным. Макет, созданный с этим, действует как любой класс и делает каждую возможную роль. Он не высмеивает конкретный объект или класс вообще. К сожалению, CPAN-поиск немного мусор, поэтому поиск "пробного макета" не показывает его в результатах.

Я также должен отметить, что документация не содержит большого количества мотивационных или примерных кодов, поэтому вы можете проверить некоторые из тестов: