7

Python doctestsは、単純なテストをソースコードに関連付けます(Pythonでは、関数のドキュメントにあります)。 詳細と例はこちら

Clojureに似たものはありますか?

私はを使用した単体テストを知ってclojure.testいますが、ソースとより緊密に統合されたものを探しています(通常、単体テストは異なるファイルにあります。ここでは、テストを「内部」に配置したいと思いますdefn)。

周りを検索すると、これが見つかりましが、非常にわかりにくいようです(テストは、Pythonのように実際のテキストで行われます。確かに、拡張するマクロdefnが望ましいでしょうか?)。

または、一般的な問題を解決する他の方法があります。それは、別のユニットよりもドキュメント(傍注を使用)含めるほうがよいテスト(通常、関数の基本的なプロパティを示す単純なもの)があることです。テストファイル。

更新 例を次に示します。ピクセルの長方形から画像の中心までの(マンハッタン)距離(ピクセル単位)を計算する関数があります。それは単純に聞こえますが、辺に奇数または偶数のピクセルがある画像の「​​中心」の意味の違いや、ブロックのどの部分から測定するかなどによって複雑になります。そのため、コードをまっすぐにするためだけにいくつかのテストを作成する必要がありました。そして今、私はドキュメントを見て、実際には、関数が何をするかを言葉よりもよく説明しているので、ドキュメントにそれらのテストが含まれているとよいでしょう...

4

2 に答える 2

11

およびメタデータのテスト フラグ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
于 2012-06-05T02:43:57.137 に答える
2

:preと:postの式はどうですか? http://blog.fogus.me/2009/12/21/clojures-pre-and-post/

于 2012-06-05T01:48:16.657 に答える