clojure
clojure.test
खोज…
है
is
मैक्रो की मूल है clojure.test
पुस्तकालय। यह अपने शरीर की अभिव्यक्ति का मूल्य लौटाता है, यदि त्रुटि संदेश संदेश को मुद्रित करता है तो अभिव्यक्ति एक गलत मूल्य देता है।
(defn square [x]
(+ x x))
(require '[clojure.test :as t])
(t/is (= 0 (square 0)))
;;=> true
(t/is (= 1 (square 1)))
;;
;; FAIL in () (foo.clj:1)
;; expected: (= 1 (square 1))
;; actual: (not (= 1 2))
;;=> false
परीक्षण मैक्रो के साथ संबंधित परीक्षण समूहीकरण
आप testing
मैक्रो का उपयोग करते हुए एक संदर्भ में संबंधित इकाई परीक्षणों को संबंधित इकाई में deftest
कर सकते हैं:
(deftest add-nums
(testing "Positive cases"
(is (= 2 (+ 1 1)))
(is (= 4 (+ 2 2))))
(testing "Negative cases"
(is (= -1 (+ 2 -3)))
(is (= -4 (+ 8 -12)))))
यह चलाने में परीक्षण के उत्पादन को स्पष्ट करने में मदद करेगा। ध्यान दें कि testing
एक deftest
अंदर होना चाहिए।
चतुराई के साथ एक परीक्षा को परिभाषित करना
अन्य भाषाओं में इकाई परीक्षणों के समान इकाई परीक्षण को परिभाषित करने के लिए deftest
एक मैक्रो है।
आप निम्नानुसार एक परीक्षण बना सकते हैं:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
यहां हम add-nums
नामक एक टेस्ट को परिभाषित कर रहे हैं, जो +
फ़ंक्शन का परीक्षण करता है। परीक्षण के दो दावे हैं।
आप अपने वर्तमान नामस्थान में इस तरह परीक्षण चला सकते हैं:
(run-tests)
या आप केवल उन नामों के लिए परीक्षण चला सकते हैं जो परीक्षण में है:
(run-tests 'your-ns)
कर रहे हैं
are
मैक्रो भी का हिस्सा है clojure.test
पुस्तकालय। यह आपको एक टेम्प्लेट के खिलाफ कई दावे करने की अनुमति देता है।
उदाहरण के लिए:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
यहाँ, (= xy)
एक टेम्प्लेट के रूप में कार्य करता है जो प्रत्येक तर्क को लेता है और इसमें से एक अभिकथन बनाता is
।
यह विस्तार करने के लिए कई is
दावा है:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
उपयोग-जुड़नार के साथ प्रत्येक परीक्षण या सभी परीक्षणों को लपेटें
use-fixtures
प्रत्येक deftest
को कोड के साथ नामस्थान में लपेटने की अनुमति देता है जो परीक्षण से पहले और बाद में चलता है। इसका उपयोग जुड़नार या स्टबिंग के लिए किया जा सकता है।
फिक्स्चर केवल फ़ंक्शन हैं जो परीक्षण फ़ंक्शन लेते हैं और इसे अन्य आवश्यक चरणों (पहले / बाद में, लपेटें) के साथ चलाते हैं।
(ns myapp.test
(require [clojure.test :refer :all])
(defn stub-current-thing [body]
;; with-redefs stubs things/current-thing function to return fixed
;; value for duration of each test
(with-redefs [things/current-thing (fn [] {:foo :bar})]
;; run test body
(body)))
(use-fixtures :each stub-current-thing)
जब इसके साथ प्रयोग किया जाता है :once
, यह फ़ंक्शन के साथ वर्तमान नामस्थान में पूरे रन को लपेटता है
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
लेनिंगन के साथ परीक्षण चल रहा है
यदि आप लीनिंगन का उपयोग कर रहे हैं और आपके परीक्षण आपके प्रोजेक्ट रूट में परीक्षण निर्देशिका में स्थित हैं तो आप lein test
का उपयोग करके अपने परीक्षण चला सकते हैं