2011-08-14 4 views
2

with-testを使用するときに、複数のテストで使用する値を定義する方法がわかりません。 (; - でも、それは私には明らかではないが、これは単一のテストかもしれ複数のアサーション)私は一度abを定義しますが、複数のテストでそれらを使用Clojureでのwith-testの共有定義

(with-test 

    (defn myfunction [arg...] 
    (code to test)) 

    (let [a (something-complex ...) 
     b (something-else ...)] 
    (is (= '(...) (myfunction a ....))) 
    (is (= '(...) (myfunction a b ..))) 
    (is (= '(...) (myfunction b ....)))) 

:私は何をしたいのようなものがあります。

どうすればいいですか?

+0

あなたがしたいことはうまくいくはずです。同様のコードに問題はありますか?ヒント: 'with-test'で生成されたコードを見るにはmacroexpandを使います。 –

+0

ああ! ok、ありがとう - 明日テストします。今すぐ寝る必要があります... –

+0

はうまくいきます。下の答えとして投稿したいのなら、私はあなたに投票をします。また、どれくらいこれを信用できますか?私が実装の詳細に頼っていることを確かめるためにmacroexpandを使う必要がある場合は?ありがとう。 –

答えて

3

with-testに与えられた定義の後のコード本体は、Clojureコードの通常の本体のように評価されるため、letのような構文を使用できます。

macroexpandを使用して、with-testのようなマクロで生成されたコードを見てください。あなたがこれでどれだけの信頼を得ることができるかは、決定するのが難しいです。私はあなたが使用しているマクロの実際の目的が何であるかを知るために常識を使用すべきだと言います。マクロは強力なツールであり、通常はマクロを使用し、実装の詳細に頼ることの境界は、関数よりもはるかに曖昧です。この場合、引数リストを見ることによってwith-testの動作について確信を持たなければなりません。最後の引数、すなわちbodyは、関数本体と同じ方法で任意の数のフォームを受け入れることを意味します。letまたはdoが動作します。 。

関連する問題