我想修改cake test
以便它可以使用a different value for *stack-trace-depth*
。修改`蛋糕测试`来控制堆栈跟踪深度(Clojure)
的built-in definition很简单:
(deftask test #{compile}
"Run project tests."
"Specify which tests to run as arguments like: namespace, namespace/function, or :tag"
(run-project-tests))
理想情况下,我想指定用命令行参数--depth=n
,东西这个效果值:
(binding [*stack-trace-depth* (if (*opts* :depth)
(read-string (*opts* :depth)))]
(run-project-tests))
什么代码,我需要做这个工作?
基于反应:把在tasks.clj
(undeftask test)
(deftask test #{compile}
(.bindRoot #'*stack-trace-depth* 5)
(println "Defining task: *stack-trace-depth* is" *stack-trace-depth* "in" (Thread/currentThread))
(run-project-tests))
下面产生以下输出:
加载
test/cake_test/core.clj
:Loading tests: *stack-trace-depth* is nil in #<Thread[thread-13,5,main]>
$ cake test
Defining task: *stack-trace-depth* is 5 in #<Thread[Thread-18,5,main]> In test: *stack-trace-depth* is nil in #<Thread[Thread-16,5,main]> Testing cake-testing.core FAIL in (test-stack-trace-depth) (core.clj:8) expected: (= *stack-trace-depth* 5) actual: (not (= nil 5)) Ran 1 tests containing 1 assertions. 1 failures, 0 errors. ---- Finished in 0.011865 seconds.
(测试代码为on Gist)
谢谢,但似乎测试仍然没有看到更新的值。我已经为该问题添加了一些测试输出。 – 2010-12-08 16:37:58
上面的新版本(在`test`任务的自定义版本中内嵌'cake.tasks.test/run-project-tests`的`* stack-trace-depth *`设置版本)似乎工作正常为了我。现在是时候挖掘Cake来学习它为什么会这样做了,因为我似乎还没有对代码库进行研究。尽管如此,它看起来很酷。感谢让我感兴趣! :-) – 2010-12-13 06:09:30