use*_*027 3 testing tdd unit-testing clojure leiningen
我使用模拟样式测试来确保我的整个应用程序正常工作.核心Clojure测试库用于测试,通过Leiningen执行.当-main
函数运行时,它定义符号以供以后在其逻辑中使用.问题是,如果我不小心使用在一个-main
测试中创建但从未在当前-main
测试中定义的符号,它仍然具有值.我希望得到一个错误,该符号是未定义的,但似乎我的测试环境以某种方式在deftest
执行之间共享状态.我怎么处理这个?将我所有便利驱动的符号定义移到一个let
语句中?
如果你def
在你的功能中使用全局变量,那通常被认为是不好的做法和理由足以let
按照你的建议使用.
但是,您可以捕获快照命名空间的映射.
(def ns-snapshot (ns-map *ns*))
Run Code Online (Sandbox Code Playgroud)
这样你的实习生符号之后
(def foo 1)
(def bar 2)
Run Code Online (Sandbox Code Playgroud)
您可以确定添加内容
(reduce dissoc (ns-map *ns*) (keys ns-snapshot))
;=> {bar #'so.core/bar, foo #'so.core/foo}
Run Code Online (Sandbox Code Playgroud)
并取消映射它们
(doseq [[k v] (reduce dissoc (ns-map *ns*) (keys ns-snapshot))] (ns-unmap *ns* k))
Run Code Online (Sandbox Code Playgroud)
这样你就可以再次获得所需的未定义错误
foo ;=> CompilerException ... Unable to resolve symbol: foo in this context
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51 次 |
最近记录: |