gpt4 book ai didi

unit-testing - 如何防止 Clojure 测试之间的符号污染?

转载 作者:行者123 更新时间:2023-11-28 19:56:41 24 4
gpt4 key购买 nike

我使用模拟式测试来确保我的整个应用程序正常工作。核心 Clojure 测试库用于测试,通过 Leiningen 执行。当 -main 函数运行时,它会定义符号供以后在其逻辑中使用。问题是,如果我不小心使用了在一个 -main 测试中创建但从未在当前 -main 测试中定义的符号,它仍然有一个值。我希望得到符号未定义的错误,但似乎我的测试环境以某种方式在 deftest 执行之间共享状态。我该如何处理?将我所有的方便驱动的符号定义移动到 let 语句?

最佳答案

如果您在函数中def-ing 全局变量,这通常被认为是不好的做法,并且有足够的理由按照您的建议使用let

但是,您可以捕获命名空间映射的快照。

(def ns-snapshot (ns-map *ns*))

所以在你实习符号之后

(def foo 1)
(def bar 2)

你可以确定加法

(reduce dissoc (ns-map *ns*) (keys ns-snapshot))
;=> {bar #'so.core/bar, foo #'so.core/foo}

取消映射

(doseq [[k v] (reduce dissoc (ns-map *ns*) (keys ns-snapshot))] (ns-unmap *ns* k))

这样你就会再次得到想要的未定义错误

 foo ;=> CompilerException ... Unable to resolve symbol: foo in this context

关于unit-testing - 如何防止 Clojure 测试之间的符号污染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097773/

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