Exercism पर अपने Factor अभ्यासों को टेस्ट करना सीखिए
जब आप कोई अभ्यास डाउनलोड करते हैं, तो Exercism उसे एक अलग, अपने आप में पूरे फोल्डर के रूप में सहेजता है, उदाहरण के लिए ~/exercism/factor/hello-world। उस फोल्डर के अंदर एक सब-फोल्डर में आपका हल रहता है और दूसरे में टेस्ट रनर:
hello-world/
├── hello-world/
│ ├── hello-world.factor <- your solution
│ └── hello-world-tests.factor <- the tests
└── exercism-tools/ <- the bundled test runner
उस फोल्डर के सबसे ऊपरी स्तर पर cd कीजिए और टेस्ट इस तरह चलाइए:
factor -roots=. -run=exercism-tools <exercise>
<exercise> की जगह अभ्यास का नाम लिखिए (यही नाम फोल्डर का भी होता है)। उदाहरण के लिए, hello-world का टेस्ट चलाने के लिए:
cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world
यह कमांड अभ्यास फोल्डर के सबसे ऊपरी स्तर से चलाइए, यानी उस डायरेक्टरी से जिसमें <exercise> और exercism-tools दोनों सब-फोल्डर मौजूद हैं।
सबमिट करते समय Exercism जो टेस्ट चलाता है, वे यही टेस्ट हैं। इसलिए जब ये सारे टेस्ट आपके कंप्यूटर पर पास हो जाएँ, तो समझिए कि आप सबमिट करने के लिए तैयार हैं।
हर अभ्यास में शुरू में सिर्फ पहला टेस्ट ही चालू रहता है। बाकी टेस्ट <exercise>-tests.factor फाइल में लिखी एक STOP-HERE लाइन से रोके रहते हैं। इस लाइन के नीचे लिखी हर चीज़ को रनर अनदेखा कर देता है।
"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
पहले पहला टेस्ट पास कीजिए, फिर STOP-HERE को अगले टेस्ट के नीचे ले जाइए (या उसे हटा दीजिए, जिससे सारे टेस्ट चालू हो जाएँ) और टेस्ट दोबारा चलाइए। इसी तरह पूरी फाइल पर काम कीजिए, जब तक हर टेस्ट पास न हो जाए।
जब आप सबमिट करते हैं, तो Exercism का रनर STOP-HERE को अनदेखा कर देता है और हर टेस्ट चलाता है। इसलिए सबमिट करने से पहले यह पक्का कर लीजिए कि सारे टेस्ट पास होते हैं।
रनर जो भी टेस्ट चलाता है, उसे छापता है और चुपचाप बंद हो जाता है:
Unit Test: { { f } [ 2015 leap-year? ] }
रनर पहले टेस्ट दिखाता है, फिर यह बताता है कि उसे कौन-सी वैल्यू की उम्मीद थी और आपके कोड ने कौन-सी वैल्यू बनाई:
Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###
यहाँ टेस्ट ने 2015 leap-year? चलाया और उम्मीद की कि स्टैक पर f रहेगा, लेकिन उसे t मिला।
टेस्ट unit-test से लिखे जाते हैं। यह एक ऐरे लेता है, जो बताता है कि कोई कोटेशन चलाने के बाद स्टैक कैसा होना चाहिए:
{ 3 } [ 1 2 + ] unit-test
यह [ 1 2 + ] को चलाता है और जाँचता है कि यह स्टैक पर 3 छोड़ता है। खाली ऐरे { } का मतलब है कि कोटेशन को स्टैक खाली छोड़ना चाहिए। किसी टेस्ट के ऊपर लिखी वैकल्पिक description लाइन उसे बस पढ़ने लायक नाम देती है।
अधिक जानकारी के लिए यूनिट टेस्टिंग पर Factor का डॉक्युमेंटेशन देखिए।