まず最初に、私がいくつかの専門用語を使いこなしていれば、ごめんなさい。私はClojureにはかなり新しいです。私はvarバインディングに依存するLazytestを使って非常に簡単なテストを書こうとしています。私は、テストファイル内のvarを再バインドして、テスト中のコードにそのバインディングを使用させることはできません。ここでLazytestの「記述」テストでvarを再バインドするにはどうすればよいですか?
は、私がテストしようとしているコードです:
(ns liar-liar.core
(:gen-class))
(def *input-file-name*)
(defn parse-input
"Just print return a var for now..."
[]
*input-file-name*)
(defn -main [& args]
(binding [*input-file-name* (first args)]
(println (parse-input))))
そして、ここではテストです:私はこのテストを実行しようとすると
(ns liar-liar.test.core
(:use lazytest.describe)
(:use liar-liar.core))
(binding [*input-file-name* "my-input-file"]
(describe parse-input "Just returns a var"
(it "returns a var"
(= "my-input-file" (parse-input)))))
、私はこのエラーを取得する:
java.lang.IllegalStateException: Var liar-liar.core/*input-file-name* is unbound.
魅力的に、私がバインディングフォームを移動すると、
(ns liar-liar.test.core
(:use lazytest.describe)
(:use liar-liar.core))
(describe parse-input "Just returns a var"
(it "returns a var"
(binding [*input-file-name* "my-input-file"]
(= "FAIL" (parse-input)))))
テストは正常に動作しますが、(パーズ入力)式の値が出力されないため、レポートは理想的ではありません( "FAIL"を "my-入力ファイル "):
FAILURE: Namespaces liar-liar.test.core #'liar-liar.core/parse-input Just returns a var returns a var
at liar_liar/test/core.clj line 7
Expression: (binding [*input-file-name* my-input-file] (= FAIL (parse-input)))
Result: false
Local bindings:
{}
この種のテストを行うには別の方法がありますか?
ありがとうございます! ダン
おかげで探していた結果を生成しました!私はその機能に入力ファイル名を渡すだけの良いアドバイスだと思います。動的にバインドされたvarにする理由はありません。 –