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

ska*_*iol 2 unit-testing clojure clojure.test

我很难在Clojure中创建一个简单的单元测试,with-redefs用于在Windows上进行模拟.测试代码,我要测试的函数和要模拟的函数都在不同的命名空间/文件中:

被测功能:

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

(defn afunc [param] 
  (b/bfunc param))
Run Code Online (Sandbox Code Playgroud)

要模拟的从属b命名空间:

  (ns com.mynamespace.b)

  (defn bfunc [param]
    ; External call
  )
Run Code Online (Sandbox Code Playgroud)

测试代码

(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"))
  )
)
Run Code Online (Sandbox Code Playgroud)

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

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

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

ska*_*iol 6

原来这个问题特定于我正在研究的项目,因为-Dclojure.compiler.direct-linking = true jvm-opts标志.

关闭直接链接后,我的测试也可以在我的Windows开发机器上运行.我想知道为什么他们会通过Linux,但也许它在运行时没有应用lein test.