टेस्ट जेनरेटर के बारे में जानिए

जानिए कि Clojure ट्रैक अभ्यासों के लिए टेस्ट बनाने में टेस्ट जेनरेटर का कैसे उपयोग करता है


Clojure ट्रैक प्रैक्टिस अभ्यासों के टेस्ट अपने आप जेनरेट करने के लिए एक टेस्ट जेनरेटर का उपयोग करता है। इसका आधार यह है कि problem-specifications रेपो में परिभाषित अधिकांश अभ्यासों के साथ एक canonical-data.json फाइल भी होती है। इस फाइल में मानक टेस्ट इनपुट और आउटपुट होते हैं, जिनका उपयोग अभ्यास को लागू करने के लिए किया जा सकता है।

चरण

प्रैक्टिस अभ्यास के टेस्ट जेनरेट करने के लिए टेस्ट जेनरेटर यह करता है:

  1. अभ्यास के टेस्ट केस उसकी canonical-data.json फाइल से पढ़ता है
  2. tests.toml फाइल के आधार पर वे टेस्ट केस छोड़ देता है जिन्हें बाहर रखा गया है
  3. टेस्ट केसों में बदलाव करता है (वैकल्पिक)
  4. अभ्यास के जेनरेटर टेम्पलेट की मदद से टेस्ट केसों को रेंडर करता है
  5. रेंडर किए गए टेम्पलेट को cljfmt से फॉर्मेट करता है
  6. फॉर्मेट किए गए टेम्पलेट को अभ्यास की टेस्ट फाइल में लिख देता है

चरण 1: canonical-data.json फाइल पढ़ना

टेस्ट जेनरेटर clojure/data.json लाइब्रेरी की मदद से अभ्यास की canonical-data.json से टेस्ट केस पढ़ता है।

कुछ कैनोनिकल डेटा में नेस्टिंग होती है, इसलिए पढ़े गए टेस्ट केस में एक अतिरिक्त path फील्ड भी शामिल होता है। इसमें पैरेंट एलिमेंट्स की description प्रॉपर्टी के साथ-साथ टेस्ट केस की अपनी description प्रॉपर्टी भी होती है।

ध्यान दें: कीज़ को कीवर्ड मानकर पढ़ा जाता है।

चरण 2: tests.toml फाइल में बाहर रखे गए टेस्ट हटाना

हर अभ्यास में एक tests.toml फाइल होती है, जिसमें अलग-अलग टेस्ट को बाहर रखा या बंद किया जा सकता है। टेस्ट जेनरेटर उन सभी टेस्ट केसों को हटा देता है जिन्हें बाहर रखा गया हो (include = false).

चरण 3: टेस्ट केसों में बदलाव करना (वैकल्पिक)

कुछ अभ्यासों में डेटा रेंडर करने से पहले थोड़े बदलाव की ज़रूरत पड़ सकती है। उदाहरण के लिए, आप चाहें तो विवरण को छोटा कर सकते हैं।

टेस्ट केसों में बदलाव करने के लिए .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
)
Note

अगर आप दोनों फंक्शन बनाते हैं, तो पहले add-remove-test-cases कॉल होता है और उसके बाद update-test-case।

चरण 4: टेस्ट केसों को रेंडर करना

इसके बाद (ज़रूरत पड़ने पर बदले गए) टेस्ट केस .meta/generator.tpl फाइल को दिए जाते हैं। यह फाइल तय करती है कि उन टेस्ट केसों के आधार पर टेस्ट कैसे रेंडर किए जाएँ।

चरण 5: cljfmt से रेंडर किए गए टेम्पलेट को फॉर्मेट करना

इसके बाद रेंडर किए गए टेम्पलेट को cljfmt से फॉर्मेट किया जाता है। इसके ये फायदे हैं:

  • सभी अभ्यासों की फॉर्मेटिंग एक जैसी रहती है
  • टेम्पलेट लिखते समय आपको व्हाइटस्पेस और अलाइनमेंट की अधिक चिंता करने की ज़रूरत नहीं पड़ती

चरण 6: रेंडर किए गए टेम्पलेट को अभ्यास की टेस्ट फाइल में लिखना

अंत में, रेंडर किए गए टेम्पलेट का आउटपुट अभ्यास की टेस्ट फाइल में लिख दिया जाता है।

टेम्पलेट

टेम्पलेट hbs लाइब्रेरी से रेंडर किए जाते हैं, जो handlebars सिंटैक्स का समर्थन करती है (handlebars.java की मदद से)।

कमांड-लाइन इंटरफेस

टेस्ट जेनरेटर को दो तरीकों से चलाया जा सकता है:

  1. bin/generate-tests: उन सभी अभ्यासों के टेस्ट जेनरेट करता है जिनमें जेनरेटर टेम्पलेट मौजूद है
  2. bin/generate-tests <slug>: बताए गए अभ्यास के टेस्ट जेनरेट करता है, अगर उसमें जेनरेटर टेम्पलेट है