سؤال

أقوم حاليًا بإعادة تمثيل جناح اختبار تم بناؤه من قبل زميل وأرغب في استخدامه 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 وإذا كان الأمر كذلك ، كيف؟

ملاحظة: الرمز يسير على هذا النحو:

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

with 'My::Cool::Role';

has attr => ( ... );
هل كانت مفيدة؟

المحلول

Test :: Deep (تم تحميله عبر Test :: Most Via Test :: Class :: Most) يتم تصديره blessed جنبا إلى جنب مع الكثير من الأشياء الأخرى ربما لا ينبغي أن يكون. لم يتم توثيقه. يتم تصدير موس أيضًا أكثر شيوعًا Scalar::Util::blessed. حيث Scalar::Util::blessed شائع إلى حد ما ، الاختبار :: العميق يجب ألا يتم تصديره بشكل مختلف blessed.

لسوء الحظ ، لا توجد طريقة جيدة لإيقافها. أود أن أقترح في بلدي :: اختبار :: الفصل :: قاعدة القيام بالاختراق التالي:

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;

والإبلاغ عن المشكلة اختبار :: عميق و اختبار :: معظم.

نصائح أخرى

يمكنك سحق صادرات معينة عبر (على سبيل المثال):

use Test::Deep '!blessed';

لقد أصدرت للتو نسخة محدثة من Test :: Most. إذا قمت بتثبيت 0.30 ، فإن هذه المشكلة تختفي.

قد يكون الأشخاص الذين يجدون هذه الصفحة مهتمين أيضًا بمعرفة اختبارات الاختبار المختلفة :: Class-moose mashup:

مع أي من هذه القدر من إعادة البناء سوف مطلوب- يختلف بناء الجملة. ومع ذلك ، مع قدر من الاكتشاف والاستبدال ، قد تكون قادرًا على إجراء انتقال سريع إلى حد ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top