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

标签 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))

要模拟的依赖 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 绑定(bind)未应用并且测试想要实现,例如http 电话,我想 mock 。如果我运行 lein test,或者尝试通过 Eclipse CCW 从 REPL 执行测试,情况也是一样的。

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

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

最佳答案

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

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

关于unit-testing - with-redefs 在 Windows 上的特定项目中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093502/

相关文章:

python - 如何编写单元测试以确保我的代码遵循 HTTP 重定向?

java - 有没有办法用 Selenium 获取/保存 DOM?

http - 如何使用 Noir Web 框架进行 HTTP 302 重定向

matrix - 将clojure矩阵拼接成四等分

testing - 是否有一种(惯用的)方法来测试 Clojure 中 IO 函数的结果?

testing - 具有多个断言和报告的 Clojure 测试

c++ - Google 测试 C++ 检查流是否为空

python - 在 Python Flask 蓝图中模拟函数

clojure - 为什么使用文字字符构建 Clojure 字符串?