2017-09-07 29 views
2

我很难在Clojure中使用with-redefs在Windows上进行模拟来创建简单的单元测试。测试代码,我将要测试的功能和作用被嘲笑都在不同的命名空间/文件:被测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精机(搬运工容器或虚拟Ubuntu的),但它只是执行/我的Windows开发机器上开发他们的时候不工作:with-redefs绑定是不适用和测试想要使真正的例如http调用,我想嘲笑。如果我运行lein test,或尝试通过Eclipse CCW从REPL执行测试,情况也是如此。

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

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

+0

无法在Windows 7上使用Clojure 1.8.0进行重现。 –

回答

5

原来,这个问题是因为-Dclojure.compiler.direct联=真 JVM-OPTS标志的具体到项目我工作。

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

相关问题