برنامه نویسی

پوشش آزمون در عمل – جامعه dev

این قسمت چهارم در سریال وبلاگ “به سمت پوشش بیشتر” است.

اولین پست وبلاگ استفاده اساسی از Test::Coverage توزیع اما می تواند کارهای بیشتری انجام دهد!

تمام کد تحت پوشش؟

اگر شرایطی دارید که تمام آزمون در یک توزیع کلیه کد اجرایی را پوشش دهد ، می توانید پرونده آزمون را به این موارد ساده کنید:

use Test::Coverage;

must-be-complete;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این تنظیم می کند plan به 1 تست ، و اگر در واقع تمام کد پوشانده شده است ، آن را خوب علامت بزنید.

اگر این به دلایلی شکست بخورد ، پس report وت source-with-coverage زیرمجموعه ها فراخوانی خواهند شد و بازخوردی را در اختیار برنامه نویس قرار می دهد که در آن خطوط تحت پوشش قرار نگرفته است.

اگر می خواهید برای خودتان روشن باشید که هدف آزمایش پوشش چیست ، می توانید این زیرروال را به عنوان “TODO” علامت گذاری کنید:

use Test::Coverage;

todo "needs more tests!";
must-be-complete;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این امر اطمینان حاصل می کند که از یک طرف عدم موفقیت آزمایش پوشش نه شما را از بارگذاری نسخه جدید با EG متوقف کنید App::Mi6، اما این امر را برای هر نگهدارنده فعلی یا آینده روشن می کند که هدف این است که تمام کد ها را در آزمایشات پوشش دهد.

من شخصاً این کار را نمی کردم. آزمایش پوشش بیش از حد مانند اسارت برای من احساس می شود ، و برنامه نویسی واقعاً باید سرگرم کننده باشد!

آیا همه مسیرهای کد واقعاً پوشیده شده اند؟

حتی اگر تست ها می گویند که تمام خطوط کد تحت پوشش قرار گرفته است ، آیا این تضمین می کند که تمام مسیرهای کد پوشانده شده است؟ احتمالاً نه چرا این است؟

خوب ، به این دلیل است که دانه بندی پوشش کد است خط منبع مبتنی بر و ممکن است در یک خط از کد منبع راکو اتفاق بیفتد! به عنوان مثال ، این سه گانه ساده را بگیرید:

my $a = .pick;  # either "foo" or "frobnicate"
my $b = $a eq "foo" ?? "bar" !! "baz";
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از دیدگاه پوشش کد ، مهم نیست $a ارزش را داشت "foo" یا "frobnicate" در تکالیف به $bبشر اما برای اجرای کد شما ، این ممکن است نتایج متفاوتی داشته باشد!

یکی از راه های اطراف آن ، ممکن است تقسیم آن سه قلو در چندین خط باشد:

my $a = <foo frobnicate>.pick;  # either "foo" or "frobnicate"
my $b = $a eq "foo"
          ?? "bar"
          !! "baz"
;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اما این احساس کمی مبهم است: تطبیق سبک برنامه نویسی خود را فقط برای برآورده کردن هرگونه آزمایش پوشش.

احتمالاً بهتر است بدانید که تست پوشش 100 ٪ هنوز هم است هیچ تضمین می کند که تمام مسیرهای کد ممکن آزمایش شده اند. و این که شما همیشه باید با توجه به آزمایش کد خود هوشیار باشید: راه های جدیدی برای شکستن آن پیدا کنید و تست هایی را برای مشاهده چنین شکستگی انجام دهید!

بروزرسانی وضعیت

از 225 توزیع که من در حال حاضر شخصاً حفظ می کنم ، 108 مورد از آنها اکنون آزمایش پوشش را فعال کرده اند. 32 مورد از آنها آزمایش پوشش کاملی دارند. بنابراین هنوز هم بسیاری از ماژول ها مورد آزمایش قرار نمی گیرند و قطعاً کاملاً کاملاً تحت پوشش قرار نمی گیرند. بعد از فشار اولیه برای آزمایش آزمایش پوشش ، من حدود 100 مورد از آنها را انجام دادم. این ایده خوبی از همه موارد گوشه ای به من داد.

اکنون تست پوشش را فقط در صورت نیاز به توزیع نیاز به بروزرسانی اضافه می کنم. و هر توزیع جدید آزمایش پوشش را انجام می دهد ، البته!

در مورد Rakuast چطور؟

جدید Slang::Lambda است بسیار توزیع کوچک که به فرد اجازه می دهد از آن استفاده کند λ به عنوان مترادف برای استارت بلوک نقطه -> در کد منبع Raku. این یک است واقعاً ماژول کوچک ، بنابراین آزمایش پوشش باید آسان باشد.

مشکل این است که هنگام استفاده از گرامر میراث ، از یک قطعه کد اجرا می شود و در صورت استفاده از دستور زبان جدید Raku (Rakuast) ، کد دیگر نیز اجرا می شود. و فقط می توان اجرای کد در یک یا دستور زبان دیگر را اجرا کرد!

خوشبختانه ، Test::Coverage توزیع به فرد اجازه می دهد تا با کمی بیشتر لفظ ، این پرونده را اداره کند. پرونده تست به نظر می رسد:

use Test::Coverage;

default-coverage-setup;

run;

%*ENV<RAKUDO_RAKUAST>=1;
run;

must-be-complete;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که اکنون ما به صراحت اجرا می کنیم default-coverage-setup وت run زیرمجموعه ها (که به طور معمول توسط روالهای آزمایشی زیر کاپوت اجرا می شوند).

درست قبل از بار دوم run زیرروه نامیده می شود ، RAKUDO_RAKUAST متغیر محیط تنظیم شده است: این باعث می شود raku اجرایی برای استفاده از دستور زبان جدید Raku هنگام تجزیه کد. در این حالت ، کد خاص Rakuast را در زبان عامیانه لامبدا به عنوان اجرا نشان می دهد.

تماس به must-be-complete سپس می بینید که همه چیز خوب است ، و علامت گذاری کنید آزمون خوب است.

پایان

آزمایش پوشش به شما کمک می کند تا تعیین کنید که کدام قسمت از کد در توزیع هنوز آزمایش نشده است. اما هست هیچ تضمین می کند که واقعاً تمام مسیر کد ممکن آزمایش شده است.

اضافه کردن آزمایش پوشش در مرحله بعدی کار زیادی است. همانطور که با هر آزمایش دیگری انجام می دهید ، اطمینان حاصل کنید که آن را در حین توسعه توزیع اضافه کنید.

در Test::Coverage توزیع امکان انعطاف پذیری بیشتر در بسیاری از موارد گوشه ای را نیز فراهم می کند ، نه فقط برای موارد آزمایش ساده و ساده.

این در حال حاضر این سری از پست های وبلاگ را به پایان می رساند. قسمت های جدید ممکن است در مرحله بعدی اضافه شود: هرگز نگو هرگز!

اگر کاری را که من انجام می دهم دوست دارید ، تعهد به یک حمایت مالی کوچک برای من به معنای بسیار خوبی است!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا