with-redefs 在 Windows 的特定项目中不起作用

with-redefs does not work in specific project on Windows

我很难使用 with-redefs 在 Clojure 中创建一个简单的单元测试来模拟 Windows。测试代码,我要测试的函数和要mock的函数都不一样namespaces/files:

正在测试的函数:

(ns com.mynamespace.a
  (:require [com.mynamespace.b :as b] ) )

(defn afunc [param] 
  (b/bfunc param))

要模拟的依赖 b 命名空间:

  (ns com.mynamespace.b)

  (defn bfunc [param]
    ; External call
  )

测试代码

(ns com.mynamespace.a-test
  (:require [com.mynamespace.a :as a]
            [com.mynamespace.b :as b] )
  (:use [clojure.test]))

(deftest a-tests
      (with-redefs [b/bfunc (constantly "dummy")]
        (print (a/afunc "test"))
  )
)

我认为我使用 with-redefs 是正确的,因为我的单元测试 运行 在 Linux 机器上很好(docker容器或虚拟 Ubuntu),但当 executing/developing 它们在我的 Windows 开发机器上时它只是不起作用:with-redefs 绑定 未应用 并且测试想要实现,例如http 电话,我想嘲笑。如果我 运行 lein test 或尝试通过 Eclipse CCW 从 REPL 执行测试,情况相同。

我知道 with-redefs 有一些奇怪的行为,但由于我的测试在 Linux 上运行良好,我想我错过了一些东西,当 运行 在 Windows 上测试这个项目时.在我的 Windows 机器上编写测试时,我想实现快速反馈循环。

你知道我做错了什么吗? 谢谢, 安德拉斯

由于 -Dclojure.compiler.direct-linking=true jvm-opts 标志,这个问题特定于我正在处理的项目。

关闭直接链接后,我的测试也在我的 Windows 开发机器上运行。我想知道为什么他们传递了 Linux,但也许它没有应用,当 运行 lein test 在那里。