如果在测试执行期间抛出异常,文件名和行号通常对找到问题没有帮助。例如,以下是这段代码:
`
(require '[clojure.test :refer [deftest test-var]])
(deftest foo
(meta))
(test-var #'foo)
`
将以 AFn.java:429 的错误输出。
`
ERROR in (foo) (AFn.java:429)
未捕获的异常,不在断言中。
期望:nil
实际:clojure.lang.ArityException: 传递给 core/meta--4144 的参数数量不正确(0)
at clojure.lang.AFn.throwArity (AFn.java:429)
clojure.lang.AFn.invoke (AFn.java:28)
user/fn (error_reporting.clj:4)
clojure.test$test_var$fn__7670.invoke (test.clj:704)
clojure.test$test_var.invoke (test.clj:704)
user$eval6.invoke (error_reporting.clj:6)
clojure.lang.Compiler.eval (Compiler.java:6782)
...etc
`
(链接:http://dev.clojure.org/jira/browse/CLJ-377?focusedCommentId=24016&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-24016 文本:Rich 的关于 CLJ-377 的评论 24016) 表示他认为消息应该报告测试文件行而不是异常抛出的位置。
方法:从错误堆栈跟踪顶部过滤堆栈跟踪类前缀 {{clojure.lang.AFn}}。
应用补丁后,上述示例输出为 error_reporting.clj:4
`
ERROR in (foo) (error_reporting.clj:4)
未捕获的异常,不在断言中。
期望:nil
实际:clojure.lang.ArityException: 传递给 core/meta--4141 的参数数量不正确(0)
at clojure.lang.AFn.throwArity (AFn.java:429)
clojure.lang.AFn.invoke (AFn.java:28)
user$fn__3.invokeStatic (error_reporting.clj:4)
user/fn (error_reporting.clj:3)
clojure.test$test_var$fn__114.invoke (test.clj:705)
clojure.test$test_var.invokeStatic (test.clj:705)
clojure.test$test_var.invoke (test.clj:-1)
user$eval6.invokeStatic (error_reporting.clj:6)
user$eval6.invoke (error_reporting.clj:-1)
clojure.lang.Compiler.eval (Compiler.java:6939)
...etc
`
补丁: clj-1811.patch