我写过以下Midje测试:
(fact (followers-minus-friends ...name...) => ["Dude"]
(provided (idset show-followers ...name...) => #{1 2 3}
(idset show-friends ...name...) => #{1 2}
(userinfos #{3}) => [{:screen_name "Dude"}]))
测试以下函数(在不同的命名空间中):
(defn followers-minus-friends [screenname]
(let [difference-ids (difference (idset show-followers screenname)
(idset show-friends screenname))
userinfos (userinfos difference-ids)]
(map :screen_name userinfos)))
测试可能看起来很无用,但我只是想习惯Midje。不知何故,函数idset刚刚执行,我想通过在provided子句中提供返回值来防止这种情况。对此有什么解释?
编辑:我已将项目上传到Github,以防您想尝试重现以上情况:https://github.com/Borkdude/twitter-utils
答案 0 :(得分:2)
问题是函数idset
在源名称空间中是私有的。在测试文件中,您可以在测试命名空间中实习它。您现在有两个指向相同功能的不同变量:
#'twitter-utils.core/idset
#'twitter-utils.test.core/idset
在provided
中,您将覆盖第二个var以指向先决条件函数。但是,函数followers-minus-friends
仍然引用第一个var。这没有被覆盖,所以你得到了原始的功能。
围绕private
声明路由的常用习惯用法是使用完整的var名称,如上所述。所以你希望这个有用:
(fact (followers-minus-friends ...name...) => ["Dude"]
(provided (#'twitter-utils.core/idset show-followers ...name...) => #{1 2 3}
(#'twitter-utils.core/idset show-friends ...name...) => #{1 2}
(userinfos #{3}) => [{:screen_name "Dude"}]))
但是,它没有。我认为是Midje中的一个错误。至少,我不能随便看看会有什么伤害。我会报一张票。
目前,您需要公开idset
。