2024年 Clojure 现状调查!中分享您的想法。

欢迎!有关此如何工作的更多详细信息,请参阅关于页面。

0
测试

给定以下代码

(deftest a-test
  (is false))

运行测试会产生以下输出

FAIL in (a-test) (form-init1218676551285641018.clj:28)
expected: false
  actual: false

该行为是正确的。

这个错误信息因为以下几个原因很令人迷惑

  • 在这种情况下没有 expect 值。我没有使用 (is (= expected actual))
  • 打印出的 "expected" 和 "actual" 是相同的值,但测试却失败了。

2 答案

+2

如果您使用一个生成 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 生成的漂亮失败消息。因为我从 Expectations 的报告引擎切换到了 clojure.test 的报告引擎。我和 Alex Miller 讨论了将来在某个时候将 clojure.test 从 Clojure 的“核心”中分离出来以单独工作的可能性,并表达了对接管其维护工作的兴趣……我不知道这会不会发生,时间表是什么。

+1

你有没有见过更多的 (is ...) 测试表达式示例,能够产生类似的令人困惑的输出?

如果唯一的例子是 (is false),似乎不大可能 clojure.developers 想对 clojure.test 库进行修改。

没有,我遇到的只有这个情况。
...