我很难在 Clojure 中创建一个简单的单元测试,with-redefs
用于在 Windows 上进行模拟。测试代码、我要测试的函数和要模拟的函数都在不同的命名空间/文件中:
被测功能:
(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)上运行良好,但在我的 Windows 开发机器上执行/开发它们时它不起作用:with-redefs
绑定没有应用并且测试想要进行真实的 http 调用,我想模拟一下。如果我运行lein test
,或者尝试通过 Eclipse CCW 从 REPL 执行测试,情况也是如此。
我知道 with-redefs 有一些奇怪的行为,但是由于我的测试在 Linux 上运行良好,我想在 Windows 上运行这个项目的测试时我错过了一些东西。在我的 Windows 机器上编写测试时,我想实现快速反馈循环。
你知道我做错了什么吗?谢谢, 安德拉斯