首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Midje中如何在事实中实现“provided”?

在Midje中如何在事实中实现“provided”?
EN

Stack Overflow用户
提问于 2011-10-23 01:49:15
回答 1查看 823关注 0票数 8

我正在阅读Clojure in Action第8章关于TDD的内容,并尝试了存根宏。它使用动态绑定机制来存根函数。遗憾的是,在Clojure 1.3中,不可能对非动态变量使用绑定机制,因此存根宏在大多数情况下都不起作用,除非您显式声明指向函数动态的var。然后我想知道在Midje中存根是如何做的,并试图找到'provided‘的源代码,但我找不到它。所以它是这样的:

在Midje中如何在事实中实现“provided”?有人能详细解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-10 01:03:56

Clojure 1.3提供了一个带有-redefs的宏,即使对没有声明为dynamic的var也可以使用:

代码语言:javascript
复制
user=> (def this-is-not-dynamic)
user=> (with-redefs [this-is-not-dynamic 900] this-is-not-dynamic)
900

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

代码语言:javascript
复制
(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])))
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7861469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档