目前实现中,clojure.test/use-fixtures 钩子将在每个 deftest的基础上运行,但不会在每个 testing (clojure.test/testing) 的基础上运行。
所以,对于给定的具有多个 testingClauses 的 deftest,use-fixtures 只会运行一次。
从 RSpec (Ruby) 的背景来看这一点令人惊讶——默认行为正好相反,在我看来更为直观。
我个人这样做导致我编写的测试给出了错误的阳性——即,直到我偶然注意到这一点(碰巧)之前,我的测试套件的一部分实际上是无效的。
轶事式地,我和另一位 Clojure 开发者讨论了这个问题,他第一次也遇到了这个问题。我的意思是,在这件事情上我不孤单,并且肯定有其他开发者也有过类似的经历,即使在此之前没有 JIRA 的报告。
无论如何,当前的替代工作做法(每个使用 use-fixtures 的 test 只使用一个 deftest)可能过于冗长(与我的原始尝试相比),而且开始这样的做法也容易忘记。
我希望提出以下请求:
- 实现 use-fixtures 的一个选项,例如 {{:run-nested?}}
- 使此选项成为强制性的,即程序员要么传递 {{:run-nested? true}} 或 {{:run-nested? false}},除非事先已设置全局默认值。人们应该意识到这种细微差别,并被迫至少思考一次(否则他们可能会遇到错误的阳性和阴性)
我希望这听起来像是一个合理的、必要的、非破坏性的提案。
好运——维克多