Unit testing 在Clojure中与测试共享的定义
我正在努力了解如何在与test一起使用时定义用于多个测试的值。我想做的是:Unit testing 在Clojure中与测试共享的定义,unit-testing,clojure,Unit Testing,Clojure,我正在努力了解如何在与test一起使用时定义用于多个测试的值。我想做的是: (with-test (defn myfunction [arg...] (code to test)) (let [a (something-complex ...) b (something-else ...)] (is (= '(...) (myfunction a ....))) (is (= '(...) (myfunction a b ..))) (
(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 ....))))
其中,我定义了a
和b
一次,但在多个测试中使用它们(多个断言;这可能是一个单一的测试-即使我不清楚)
请-我该怎么做?您的假设是正确的,在使用test对
进行定义之后的代码体将像Clojure代码的任何正常体一样进行评估,因此您可以使用类似let
的构造
一个很好的技巧是使用macroexpand
查看宏生成的代码,如with test
。你对这件事的信任程度很难确定。我想说的是,你应该用你的常识来找出你正在使用的宏的实际用途。宏是强大的工具,通常使用宏和依赖实现细节之间的界限比函数更模糊。在这种情况下,通过查看参数列表,您应该对test的行为非常有信心,最后一个参数,即body
,意味着它接受任意数量的形式,就像函数体、let
或do
一样,类似的代码有什么问题吗?提示:使用macroexpand查看通过测试生成的代码。哦!好的,谢谢-明天我就要考试了。现在需要睡觉…很好。如果你想在下面贴出答案,我会给你投票。还有,你能相信多少?如果我需要使用macroexpand来确定我是否依赖于实现细节?谢谢