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机器上编写测试时,我想实现快速反馈循环.
你知道我做错了什么吗?谢谢,安德拉斯
原来这个问题特定于我正在研究的项目,因为-Dclojure.compiler.direct-linking = true jvm-opts标志.
关闭直接链接后,我的测试也可以在我的Windows开发机器上运行.我想知道为什么他们会通过Linux,但也许它在运行时没有应用lein test.