जानिए कि Clojure ट्रैक अभ्यासों के लिए टेस्ट बनाने में टेस्ट जेनरेटर का कैसे उपयोग करता है
Clojure ट्रैक प्रैक्टिस अभ्यासों के टेस्ट अपने आप जेनरेट करने के लिए एक टेस्ट जेनरेटर का उपयोग करता है।
इसका आधार यह है कि problem-specifications रेपो में परिभाषित अधिकांश अभ्यासों के साथ एक canonical-data.json फाइल भी होती है। इस फाइल में मानक टेस्ट इनपुट और आउटपुट होते हैं, जिनका उपयोग अभ्यास को लागू करने के लिए किया जा सकता है।
प्रैक्टिस अभ्यास के टेस्ट जेनरेट करने के लिए टेस्ट जेनरेटर यह करता है:
canonical-data.json फाइल से पढ़ता हैtests.toml फाइल के आधार पर वे टेस्ट केस छोड़ देता है जिन्हें बाहर रखा गया हैcanonical-data.json फाइल पढ़नाटेस्ट जेनरेटर clojure/data.json लाइब्रेरी की मदद से अभ्यास की canonical-data.json से टेस्ट केस पढ़ता है।
कुछ कैनोनिकल डेटा में नेस्टिंग होती है, इसलिए पढ़े गए टेस्ट केस में एक अतिरिक्त path फील्ड भी शामिल होता है। इसमें पैरेंट एलिमेंट्स की description प्रॉपर्टी के साथ-साथ टेस्ट केस की अपनी description प्रॉपर्टी भी होती है।
ध्यान दें: कीज़ को कीवर्ड मानकर पढ़ा जाता है।
tests.toml फाइल में बाहर रखे गए टेस्ट हटानाहर अभ्यास में एक tests.toml फाइल होती है, जिसमें अलग-अलग टेस्ट को बाहर रखा या बंद किया जा सकता है।
टेस्ट जेनरेटर उन सभी टेस्ट केसों को हटा देता है जिन्हें बाहर रखा गया हो (include = false).
कुछ अभ्यासों में डेटा रेंडर करने से पहले थोड़े बदलाव की ज़रूरत पड़ सकती है। उदाहरण के लिए, आप चाहें तो विवरण को छोटा कर सकते हैं।
टेस्ट केसों में बदलाव करने के लिए .meta/generator.clj फाइल बनाइए, जिसमें <slug>-generator नेमस्पेस हो।
टेस्ट केसों में बदलाव करने के दो तरीके हैं:
अलग-अलग टेस्ट केस बदलने के लिए यह फंक्शन बनाइए:
(defn update-test-case
"Update a test case"
[test-case]
;; function body
)
यह उदाहरण :path वैल्यू के अंतिम एलिमेंट के अलावा बाकी सभी हटा देता है (जिससे विवरण छोटा हो जाता है):
(ns difference-of-squares-generator)
(defn update-test-case [test-case]
(update test-case :path #(take-last 1 %)))
टेस्ट केस जोड़ने या हटाने के लिए यह फंक्शन बनाइए:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
अगर आप दोनों फंक्शन बनाते हैं, तो पहले add-remove-test-cases कॉल होता है और उसके बाद update-test-case।
इसके बाद (ज़रूरत पड़ने पर बदले गए) टेस्ट केस .meta/generator.tpl फाइल को दिए जाते हैं। यह फाइल तय करती है कि उन टेस्ट केसों के आधार पर टेस्ट कैसे रेंडर किए जाएँ।
इसके बाद रेंडर किए गए टेम्पलेट को cljfmt से फॉर्मेट किया जाता है। इसके ये फायदे हैं:
अंत में, रेंडर किए गए टेम्पलेट का आउटपुट अभ्यास की टेस्ट फाइल में लिख दिया जाता है।
टेम्पलेट hbs लाइब्रेरी से रेंडर किए जाते हैं, जो handlebars सिंटैक्स का समर्थन करती है (handlebars.java की मदद से)।
टेस्ट जेनरेटर को दो तरीकों से चलाया जा सकता है:
bin/generate-tests: उन सभी अभ्यासों के टेस्ट जेनरेट करता है जिनमें जेनरेटर टेम्पलेट मौजूद हैbin/generate-tests <slug>: बताए गए अभ्यास के टेस्ट जेनरेट करता है, अगर उसमें जेनरेटर टेम्पलेट है