midje 不对散列图提供的函数存根
midje does not stub functions provided with hashmaps
考虑以下代码
(use 'midje.sweet)
(defn x2 [x] (* x x))
(def fs {:x2 x2})
(fact
(x2 1) => "one"
((:x2 fs) 1) => "one"
(against-background
(#'tweetfetcher.core-test/x2 1) => "one"))
输出
FAIL at (core_test.clj:177)
Expected: "one"
Actual: 1
FAILURE: 1 check failed. (But 32 succeeded.)
第一次检查被存根,而第二次使用哈希映射 fs
.
提供的 x2
考虑到我排除了引用,为什么 (:x2 fs)
没有存根?
感谢您的见解。
我对它以这种方式工作并不感到惊讶。在 (x2 1)
中,编译时已知 x2
是定义为 (defn x2 [x] (* x x))
.
的函数
在((:x2 fs) 1)
中,我们知道,编译时,fs
是{:x2 x2}
,但我们还不知道(:x2 fs)
的结果。我的意思是表达式 (:x2 fs)
在 fact
扩展期间不被评估。它可能看到 (:x2 fs)
不是解析为函数的 var,因此不会将其与我们的存根(在 against-background
内)相关联。
考虑以下代码
(use 'midje.sweet)
(defn x2 [x] (* x x))
(def fs {:x2 x2})
(fact
(x2 1) => "one"
((:x2 fs) 1) => "one"
(against-background
(#'tweetfetcher.core-test/x2 1) => "one"))
输出
FAIL at (core_test.clj:177)
Expected: "one"
Actual: 1
FAILURE: 1 check failed. (But 32 succeeded.)
第一次检查被存根,而第二次使用哈希映射 fs
.
x2
考虑到我排除了引用,为什么 (:x2 fs)
没有存根?
感谢您的见解。
我对它以这种方式工作并不感到惊讶。在 (x2 1)
中,编译时已知 x2
是定义为 (defn x2 [x] (* x x))
.
在((:x2 fs) 1)
中,我们知道,编译时,fs
是{:x2 x2}
,但我们还不知道(:x2 fs)
的结果。我的意思是表达式 (:x2 fs)
在 fact
扩展期间不被评估。它可能看到 (:x2 fs)
不是解析为函数的 var,因此不会将其与我们的存根(在 against-background
内)相关联。