2012-06-05 16 views
7

पायथन सिद्धांत स्रोत कोड के साथ सरल परीक्षणों को जोड़ता है (पायथन में वे फ़ंक्शन प्रलेखन में हैं)। More info and examples hereपाइथन डॉक्टस्ट के बराबर क्लोजर?

क्या क्लोजर के लिए कुछ भी समान है?

मुझे clojure.test के साथ यूनिट परीक्षणों के बारे में पता है, लेकिन स्रोत के साथ कुछ अधिक बारीकी से एकीकृत की तलाश है (आमतौर पर यूनिट परीक्षण विभिन्न फाइलों में हैं; यहां मैं defn "के अंदर" परीक्षण "रखना चाहता हूं)।

आसपास के आसपास मुझे this मिला, लेकिन यह बहुत ही अजीब लगता है (परीक्षण वास्तविक पाठ में हैं, जैसे पायथन - निश्चित रूप से defn विस्तारित एक मैक्रो बेहतर होगा?)।

या शायद सामान्य समस्या को हल करने का कोई अन्य तरीका है, जो कि मेरे पास कुछ परीक्षण हैं (आमतौर पर साधारण चीजें जो फ़ंक्शन के मूल गुणों को प्रदर्शित करती हैं) जो दस्तावेज़ीकरण के साथ बेहतर शामिल होंगी (मैं marginalia का उपयोग कर रहा हूं) अलग यूनिट परीक्षण फाइलों की तुलना में।

अद्यतन यहां एक उदाहरण है: मेरे पास एक ऐसा फ़ंक्शन है जो छवि के केंद्र में पिक्सेल के आयत से (मैनहट्टन) दूरी (पिक्सल में) की गणना करता है। यह आसान लगता है, लेकिन पक्षों पर अजीब या यहां तक ​​कि पिक्सेल की संख्या के साथ "केंद्र" के अर्थ में अंतर जैसे चीजों से जटिल है, या आप जिस ब्लॉक से मापते हैं उसका कौन सा हिस्सा है। इसलिए मुझे सीधे कोड प्राप्त करने के लिए कुछ परीक्षण लिखना पड़ा। और अब मैं दस्तावेज़ों को देखता हूं और वास्तव में यह सबसे अच्छा होगा यदि दस्तावेज़ों में उन परीक्षणों को शामिल किया गया था क्योंकि वे शब्दों की तुलना में बेहतर व्याख्या करते हैं ...

उत्तर

10

और मेटाडाटा में परीक्षण झंडा, http://clojure.org/special_forms

(defn 
^{:doc "mymax [xs+] gets the maximum value in xs using > " 
    :test (fn [] 
      (assert (= 42 (mymax 2 42 5 4)))) 
    :user/comment "this is the best fn ever!"} 
    mymax 
    ([x] x) 
    ([x y] (if (> x y) x y)) 
    ([x y & more] 
    (reduce mymax (mymax x y) more))) 

user=> (test #'mymax) 
:ok 
user=> (doc test) 
------------------------- 
clojure.core/test 
([v]) 
    test [v] finds fn at key :test in var metadata and calls it, 
    presuming failure will throw exception 
nil 
+0

सही दिखता है! पता नहीं था कि अस्तित्व में था। लेकिन आप इसे कैसे चलाते हैं? क्या लीन टेस्ट इसे कॉल करता है? –

+0

परीक्षण फ़ंक्शन का उपयोग करें: (परीक्षण # 'mymax), दस्तावेज़: http://clojuredocs.org/clojure_core/clojure.core/test –

1

कैसे: पूर्व और पोस्ट अभिव्यक्तियां? http://blog.fogus.me/2009/12/21/clojures-pre-and-post/

+0

ओह कि सुंदर और बहुत करीब है, लेकिन यह मुझे विशिष्ट उदाहरण देना नहीं देता। मैं इस प्रश्न में एक उदाहरण जोड़ूंगा जो बेहतर दिख सकता है जो मैं ढूंढ रहा हूं। –

+0

': प्री' और 'पोस्ट' स्थितियां अनुबंधों के लिए अच्छी हैं, परीक्षणों के लिए इतना अच्छा नहीं है। – ivant

संबंधित मुद्दे