2012-06-05 13 views
7

Python doctestsは簡単なテストをソースコードと関連付けます(Pythonでは関数ドキュメントにあります)。 More info and examples herePython doctestに相当するClojure?

Clojureには何か類似点はありますか?

clojure.testで単体テストを認識していますが、ソースとより密接に統合されたものを探しています(通常、単体テストは別のファイルにあります;ここで私はdefnの内部にテストしたいと思っています)。

私はthisを見つけましたが、テストは実際にはPythonのような実際のテキストです(確かに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

は完璧に見えます!存在していなかった。しかし、どうやってそれを動かすのですか? leinテストはそれを呼び出しますか? –

+0

テスト機能を使用する:(test# 'mymax)、doc:http://clojuredocs.org/clojure_core/clojure.core/test –

1

について:preと:postの式は? http://blog.fogus.me/2009/12/21/clojures-pre-and-post/

+0

ああそれはかわいいと非常に近いのですが、それは私が具体的な例を与えることはできません。私は、私が探しているものをよりよく示すかもしれない質問に例を追加します。 –

+0

':pre'と':post'の条件は契約には良いものであり、テストにはあまり適していません。 – ivant

関連する問題