Clojure 在Midje中清除内部函数调用

Clojure 在Midje中清除内部函数调用,clojure,midje,Clojure,Midje,我正在测试一个函数,该函数使用来自其他命名空间的另外两个函数 (fact "a test" (let [result (function-that-uses-functions-from-other-namespace)] result => truthy)) 我想从其他名称空间中删除函数,但在编写测试时遇到了问题 (fact "a test" (let [result (function-that-uses-functions-from-other-

我正在测试一个函数,该函数使用来自其他命名空间的另外两个函数

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
      result => truthy))
我想从其他名称空间中删除函数,但在编写测试时遇到了问题

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
          (function-that-uses-functions-from-other-namespace)
          (provided (other-namespace/function1 "parameter") => "stub_response"))

但这种方法似乎不起作用。有什么提示吗?这仅仅是一种情况吗?如

中所建议的,在可检查项之前对let进行评估。您可以在后台使用
,它不仅会对单个事实,而且会对整个
事实
表单执行函数调用:

(fact "a test"
      ...
      (against-background
        (other-namespace/function1 "parameter") => "stub_response"))

实际上,这可能也适用于您链接的问题。

您可以在后台使用
,它不仅可以删除单个事实的函数调用,还可以删除整个
事实的函数调用

(fact "a test"
      ...
      (against-background
        (other-namespace/function1 "parameter") => "stub_response"))

实际上,这可能也适用于您链接的问题。

尝试不使用
let
,因为它会在设置前立即执行函数:

(事实“测试”
(使用来自其他命名空间的函数的函数)=>truthy
(提供(一些内部函数arg1 arg2)=>一些结果
(其他内部函数)=>其他结果)
您只需要将函数stubbed
require
d。它们可以来自另一个命名空间

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
      result => truthy))

请注意,协议方法不能以这种方式存根。

尝试不使用
let
,因为它会在设置之前立即执行该功能:

(事实“测试”
(使用来自其他命名空间的函数的函数)=>truthy
(提供(一些内部函数arg1 arg2)=>一些结果
(其他内部函数)=>其他结果)
您只需要将函数stubbed
require
d。它们可以来自另一个命名空间

(fact "a test"
      (let [result (function-that-uses-functions-from-other-namespace)]
      result => truthy))
请注意,协议方法不能以这种方式存根。

是否使用
(先决条件)
?大概是这样的:

(fact "a test"
  (prerequisite (other-namespace-function1 "parameter) => "stub_response")
  (function-that-uses-functions-from-other-namespace) => truthy))
这应该允许您为您喜欢的任何旧函数指定返回值,当您运行实际事实时,这些值将被重放

看一看。与提供的
相比,我更喜欢它,因为它允许我坚持给定的when-then测试风格,仍然使用与实际检查程序相同的语法。

它使用
(先决条件)
工作吗?大概是这样的:

(fact "a test"
  (prerequisite (other-namespace-function1 "parameter) => "stub_response")
  (function-that-uses-functions-from-other-namespace) => truthy))
这应该允许您为您喜欢的任何旧函数指定返回值,当您运行实际事实时,这些值将被重放


看一看。与提供的
相比,我更喜欢这一点,因为它允许我坚持给定的when-then测试风格,仍然使用与实际检查相同的语法。

您能更新您的示例吗?在第二个示例中,您似乎没有在任何地方使用
result
,并且似乎调用了同一个函数两次。因此,我不清楚您的第二个代码片段想要实现什么。一般来说,这种结构无法工作,是的,您完全正确,您链接到的问题涵盖了这个问题。您可以更新您的示例吗?在第二个示例中,您似乎没有在任何地方使用
result
,并且似乎调用了同一个函数两次。因此,我不清楚您的第二个代码片段想要实现什么。一般来说,这种结构无法工作,是的,你是完全正确的,你链接到的问题涵盖了问题。+1这通常是一种很好的方法,它可以让你非常清楚哪些测试受到存根的影响。+1这通常是一种很好的方法,它可以让你非常清楚哪些测试受到存根的影响。