作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,抱歉,如果我搞砸了一些术语;我对 Clojure 很陌生。我正在尝试使用依赖于 var 绑定(bind)的 Lazytest 编写一个非常简单的测试。我似乎无法在测试文件中重新绑定(bind) var 并让被测代码使用该绑定(bind)。
这是我要测试的代码:
(ns liar-liar.core
(:gen-class))
(def *input-file-name*)
(defn parse-input
"Just print return a var for now..."
[]
*input-file-name*)
(defn -main [& args]
(binding [*input-file-name* (first args)]
(println (parse-input))))
这是测试:
(ns liar-liar.test.core
(:use lazytest.describe)
(:use liar-liar.core))
(binding [*input-file-name* "my-input-file"]
(describe parse-input "Just returns a var"
(it "returns a var"
(= "my-input-file" (parse-input)))))
当我尝试运行此测试时,出现此错误:
java.lang.IllegalStateException: Var liar-liar.core/*input-file-name* is unbound.
有趣的是,如果我移动绑定(bind)表单:
(ns liar-liar.test.core
(:use lazytest.describe)
(:use liar-liar.core))
(describe parse-input "Just returns a var"
(it "returns a var"
(binding [*input-file-name* "my-input-file"]
(= "FAIL" (parse-input)))))
测试按预期工作,但报告并不理想,因为它不打印 (parse-input) 表达式的值(如果我将“FAIL”替换为“my-input-,则测试通过”文件”):
FAILURE: Namespaces liar-liar.test.core #'liar-liar.core/parse-input Just returns a var returns a var
at liar_liar/test/core.clj line 7
Expression: (binding [*input-file-name* my-input-file] (= FAIL (parse-input)))
Result: false
Local bindings:
{}
我应该采用其他方式进行此类测试吗?
谢谢!丹
最佳答案
我认为您对它应该如何工作的期望是合理的,但我感觉 describe
和 it
宏正在评估 *input-file-name *
在你的绑定(bind)表单有机会绑定(bind)它之前。在我简短的 Lazytest 探索中,我发现我最好坚持使用框架提供的形式,而不是尝试用 let
或 binding
包装这两个宏中的任何一个表格。
当使用动态绑定(bind)将参数“推送”到函数时,这类问题似乎相当频繁(无论如何对我而言)。在可能的情况下实际传递该参数会更加可靠和易于理解。
关于testing - 如何在 Lazytest 'describe' 测试中重新绑定(bind) var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424220/
首先,抱歉,如果我搞砸了一些术语;我对 Clojure 很陌生。我正在尝试使用依赖于 var 绑定(bind)的 Lazytest 编写一个非常简单的测试。我似乎无法在测试文件中重新绑定(bind)
我是一名优秀的程序员,十分优秀!