Test در مسیر Factor

یاد بگیرید چطور تمرین‌های Factor خود را در Exercism test کنید.


وقتی یک تمرین را دانلود می‌کنید، Exercism آن را به‌صورت پوشه‌ای مستقل ذخیره می‌کند، مثلاً ~/exercism/factor/hello-world. این پوشه یک زیرپوشه برای راه‌حل شما دارد و یک زیرپوشه‌ی دیگر برای اجراکننده‌ی test:

hello-world/
├── hello-world/
│   ├── hello-world.factor        <- your solution
│   └── hello-world-tests.factor  <- the tests
└── exercism-tools/               <- the bundled test runner

با cd به بالاترین سطح آن پوشه بروید و testها را با این دستور اجرا کنید:

factor -roots=. -run=exercism-tools <exercise>

<exercise> را با اسم تمرین (همان اسمی که پوشه دارد) جایگزین کنید. برای نمونه، برای test کردن hello-world:

cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world

این دستور را از بالاترین سطح پوشه‌ی تمرین اجرا کنید، یعنی همان پوشه‌ای که هر دو زیرپوشه‌ی <exercise> و exercism-tools را در خود دارد.

این‌ها همان testهایی هستند که Exercism هنگام ارسال شما اجرا می‌کند؛ پس وقتی همه‌شان به‌صورت محلی موفق شوند، آماده‌ی ارسال هستید.

هر بار یک test

در آغاز هر تمرین فقط اولین test آن فعال است. testهای باقی‌مانده با یک خط STOP-HERE در فایل <exercise>-tests.factor نگه داشته می‌شوند؛ اجراکننده هر چیزی را که پایین‌تر از آن باشد نادیده می‌گیرد.

"year not divisible by 4 in common year" description
{ f } [ 2015 leap-year? ] unit-test

STOP-HERE

"year divisible by 2, not divisible by 4 in common year" description
{ f } [ 1970 leap-year? ] unit-test

اولین test را موفق کنید، بعد STOP-HERE را پایین‌تر از test بعدی ببرید (یا آن را حذف کنید تا همه فعال شوند) و دوباره testها را اجرا کنید. همین‌طور در فایل پیش بروید تا همه‌ی testها موفق شوند.

وقتی ارسال می‌کنید، اجراکننده‌ی Exercism STOP-HERE را نادیده می‌گیرد و همه‌ی testها را اجرا می‌کند؛ پس پیش از ارسال مطمئن شوید که همه‌شان موفق می‌شوند.

وقتی testها موفق می‌شوند

اجراکننده هر testی را که اجرا کرده چاپ می‌کند و بی‌صدا خارج می‌شود:

Unit Test: { { f } [ 2015 leap-year? ] }

وقتی یک test شکست می‌خورد

اجراکننده نخست test را نشان می‌دهد و سپس مقداری را که انتظار داشت در برابر مقداری که کد شما تولید کرد:

Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###

اینجا test دستور 2015 leap-year? را اجرا کرد و انتظار داشت f روی پشته باشد، اما نتیجه t بود.

خواندن یک test

testها با unit-test نوشته می‌شوند. این دستور یک آرایه می‌گیرد که توصیف می‌کند پشته پس از اجرای یک quotation چه شکلی باید باشد:

{ 3 } [ 1 2 + ] unit-test

این دستور [ 1 2 + ] را اجرا می‌کند و بررسی می‌کند که 3 روی پشته باقی بماند. یک آرایه‌ی خالی، { }، یعنی quotation باید پشته را خالی باقی بگذارد. خط اختیاری description بالای یک test فقط یک اسم خوانا به آن می‌دهد.

برای جزئیات بیشتر، مستندات Factor درباره‌ی unit testing را ببینید.