请参与2024 Clojure状态调查!

欢迎!请参阅关于页面获取更多关于如何使用本站的信息。

0
test.check

我们可以将quick-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,这提供了通过向quick-check状态(作为step-fn的返回值)回传更改来驱动/增强quick-check过程的可能性。

2 个答案

0

评论由:nberger

添加了一个替代补丁(TCHECK126-test.check-refactor.patch),将其重构为“原地”的c.t.c/quick-check,而不是添加一个新的test.check2命名空间。最重要的变化是从reporter-fn切换到step-fn,这提供了通过向quick-check状态(作为step-fn的返回值)回传更改来驱动/增强quick-check过程的可能性。

尽管 reporter-fn 已经在 master 分支中存在很长时间,但它从未成为正式发布版本的一部分,所以我现在提议将 reporter-fn 切换到这个新的 step-fn,希望它能够在下一个发布版本之前被整合。

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