gpt4 book ai didi

testing - 如何在 Lazytest 'describe' 测试中重新绑定(bind) var?

转载 作者:行者123 更新时间:2023-11-28 20:58:12 25 4
gpt4 key购买 nike

首先,抱歉,如果我搞砸了一些术语;我对 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:
{}

我应该采用其他方式进行此类测试吗?

谢谢!丹

最佳答案

我认为您对它应该如何工作的期望是合理的,但我感觉 describeit 宏正在评估 *input-file-name * 在你的绑定(bind)表单有机会绑定(bind)它之前。在我简短的 Lazytest 探索中,我发现我最好坚持使用框架提供的形式,而不是尝试用 letbinding 包装这两个宏中的任何一个表格。

当使用动态绑定(bind)将参数“推送”到函数时,这类问题似乎相当频繁(无论如何对我而言)。在可能的情况下实际传递该参数会更加可靠和易于理解。

关于testing - 如何在 Lazytest 'describe' 测试中重新绑定(bind) var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com