2024 Clojure状态调查 中分享您的看法!

欢迎!请参阅 关于 页面以获取更多关于这个工作方式的详细信息。

0
test.check

我们可以将快速检查过程视为一个状态机,其状态流转类似于

`

   started
      v

尝试,尝试,[...]

      v

成功 | 失败

             v
shrinking, shrinking, [...]
             v
           shrunk"

`

过程开始,基于生成的值运行试验,要么成功,要么失败。如果成功,则过程结束。如果失败,那么它将运行成功的参数的连续缩小直到达到终端缩小状态。

以这种方式对过程进行建模,我们可以在过程的有趣点上调用step-fn,这有两个目的
- 向用户反馈关于过程的信息(通过副作用)
- 修改/增强过程跟踪的状态,使得实现如优雅地终止完成前的过程、在生成的值上计算统计数据(TCHECK-87)、添加时间戳(TCHECK-8、TCHECK-95、TCHECK-96)等变得容易。

附带的补丁旨在100%向后兼容。添加了新的{{clojure.test.check2/quick-check}}函数。"旧"的{{clojure.test.check/quick-check}}通过调用新的函数重新实现,通过将reporter-fn提升为step-fn,并通过(reporter-fn->step-fn)适配器函数维护所有当前行为。

编辑:添加了另一个补丁(TCHECK126-test.check-refactor.patch),它对c.t.c/quick-check进行"就地"重构,而不是添加新的test.check2命名空间。最重要的变化是从reporter-fn切换到step-fn,这给了通过将步长函数的反馈改变传输回快速检查状态的可能性(作为步长函数的返回值)。

2 个答案

0

评论者:nberger

添加了另一个补丁(TCHECK126-test.check-refactor.patch),它对c.t.c/quick-check进行"就地"重构,而不是添加新的test.check2命名空间。最重要的变化是从reporter-fn切换到step-fn,这给了通过将步长函数的反馈改变传输回快速检查状态的可能性(作为步长函数的返回值)。

尽管reporter-fn已在master分支中存在一段时间了,但它尚未成为发布版本的一部分,因此我提议从reporter-fn切换到这个新的step-fn,希望它能在下一次发布前被采纳。

0
参考:[https://clojure.atlassian.net/browse/TCHECK-126](https://clojure.atlassian.net/browse/TCHECK-126)(由nberger报告)
...