【问题标题】:How is 'provided' implemented in a fact in Midje?在 Midje 的事实中如何实现“提供”?
【发布时间】:2011-12-13 06:31:40
【问题描述】:

我正在阅读 Clojure in Action 第 8 章中关于 TDD 的内容,并尝试了存根宏。它使用动态绑定机制来存根函数。唉,在 Clojure 1.3 中,不可能对非动态变量使用绑定机制,因此存根宏在大多数情况下不起作用,除非您明确声明指向动态函数的 var。然后我想知道如何在 Midje 中完成存根,并试图找到“提供”的来源,但我找不到。就这样吧:

如何在 Midje 的事实中实现“提供”?谁能详细解释一下?

【问题讨论】:

标签: clojure tdd stubbing midje


【解决方案1】:

Clojure 1.3 提供了一个 with-redefs 宏,它甚至可以与尚未声明为动态的变量一起工作:

user=> (def this-is-not-dynamic)
user=> (with-redefs [this-is-not-dynamic 900] this-is-not-dynamic)
900

为了向后兼容,Midje 使用了自己的版本,其内容如下所示:

(defn alter-one-root [[variable new-value]]
   (if (bound? variable) 
     (let [old-value (deref variable)]
       (alter-var-root variable (fn [current-value] new-value))
       [variable old-value])
     (do
       (.bindRoot variable new-value)
       [variable unbound-marker])))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多