如果你使用一个产生 false
的变量或表达式,这会让这里发生的事情更加明显
user=> (def v false)
#'user/v
user=> (t/deftest foo (t/is v))
#'user/foo
user=> (foo)
FAIL in (foo) (NO_SOURCE_FILE:4)
expected: v
actual: false
nil
user=>
expected:
行实际上是“我预期这个表达式会返回真值”的缩写,所以在你的例子中,它是在说“我预期 false
会返回真值”(但实际上它的值是 false
)。
clojure.test
当然可以产生更好的输出 — Jay Fields 的 Expectations 库和 Paul Stadig 的 clojure.test
扩展 Humane Test Output 所做的许多原始工作,都是为了在断言失败时产生更好的错误信息。
当我将 Expectations 中的 clojure.test
兼容性工作提取出来,并转变为一个独立的库 https://github.com/clojure-expectations/clojure-test 时,我失去了一些真正不错的失败信息,因为我都从 Expectations 的报告引擎切换到了 clojure.test
的报告引擎。我和 Alex Miller 谈过在未来的某个时间点将 clojure.test
从 Clojure "核心" 分离出来的可能性,并表达了我接管维护工作的兴趣……我不知道这会不会发生,时间表会是什么。