gpt4 book ai didi

clojure - 使用 let 子句中提供的 midje 不会 stub 方法

转载 作者:行者123 更新时间:2023-12-04 02:39:17 26 4
gpt4 key购买 nike

当我使用外部 let 子句构建一些定义和调用进行测试时, stub 无法按我预期的方式工作。例如:

这个测试失败了

(fact "blah"
(let [x (meth1 123)]
x => 246
(provided
(meth2 123) => 246)))

用这段代码

(defn meth2 [x]
(prn "meth2" x)
(* 3 x))

(defn meth1 [x]
(let [y (meth2 x)]
y))

难道我不应该对 midje 使用 let 语句吗?我不明白如何在不删除 let 的情况下让这些通过。

最佳答案

首先,如果 meth2 被正确 stub ,你的测试甚至会失败,因为 (fn [] x) 返回一个函数,因此 (fn [] x) => 246 永远不会成立。

其次,我认为 provided 仅在执行事实的左侧/右侧时才用于 stub 函数调用。在你的情况下是 (fn [] x) (并且 x 已经在那个时候被评估),以及 246 (这是常量). meth1 永远不会在您的事实上下文中被调用,只会被事先调用。

要更改它,您可以执行以下两项操作之一。要么将 let 设为事实左侧的一部分:

...
(let [x (meth1 123)] x) => 246
...

或者你使 x 成为一个在测试事实时被评估的函数:

...
(let [x #(meth1 123)] (x)) => 246
...

我认为没有办法真正看到 provided 的实际效果,即像这样:

(let [x (meth1 123)]
x => 369
(let [...]
x => 246
(provided
(meth2 123) => 246))))

let 包装事实似乎在第一个事实被触及之前执行。

关于clojure - 使用 let 子句中提供的 midje 不会 stub 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20234605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com