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

欢迎!请在 关于 页面上查看有关如何使用此站点的更多信息。

+7
测试

在查看使用 clojure.test 编写的测试的 (log) 输出时,我希望能够识别与每个测试相关的输出。在 :each fixture 中暴露当前测试变量的机制可以实现这一点。

一种可能的机制可能是,在调用 clojure.test/test-all-vars 中的 each-fixture-fn 之前,将当前测试变量绑定到 test-var 变量。

建议:提议的补丁 clj840-20161122.diff 允许 'each' fixture 通过使用 * 。访问当前执行测试的变量。由于此更改,'each' fixture 可以访问与当前测试变量相关的元数据,包括名称。

此补丁通过改变测试及其关联的 'each' fixture 运行时函数的包装顺序来实现上述功能。在此补丁之前,'each' fixture 被组合为一个单个高阶函数,然后给出一个 thunk,该 thunk 包含对 {{test-var}} 函数的调用来执行其主体。在此补丁之后,{{test-var}} 函数现在负责连接和执行 'each' fixture,但重要的是,它是在将当前测试变量添加到 * } 的绑定表达式中执行的。{{test-var}} 现在调用连接的 fixture 函数,而不是将包含对 {{test-var}} 调用的 thunk 传递给连接的 fixture 函数。

补丁: clj840-20161122.diff

by
你好,我想说,我认为这个功能对于我在其工作时使用的 Clojure 测试库来说将是有用的。

对于我的用例,Duncan 的4行补丁,添加 `*test-var*`并绑定它到 `each-fixture-fn` 表达式,就足够了。

                                                                *  } already has this information, but it's not visible to the fixture functions because it gets bound inside {{test-var}}.

这使得 * } 对每个 fixture 函数可见,直观上看起来更合理。

但是,这稍微改变了 {{test-var}} 的行为,这让我不太满意。

在 * } 上提供返回当前 test-var 的函数是否合理?

不,那个函数是 {{first}}

我同意将动态变量作为扩展接口的一部分,但认为为编写测试提供的函数会更简洁。仅此而已。

评论由:jafingerhut 提供

2013年11月22日提交的补丁 patch clj840-2.diff 现已不再干净地应用于最新的 master。更新它似乎很直接,但最好由熟悉这个代码部分的人来操作。

评论由:joelittlejohn 提供

如果这个能修复,我会觉得非常实用。

我已经添加了一个更新的补丁,它与 clj840-2.diff 的内容相同,但适用于截至2016年11月22日的当前 master 版本(c0326d2)。

评论由:joelittlejohn 提供

我意识到我只翻译了别人提供的补丁,但如果您认为在它准备好供考虑之前还需要进一步操作,请随时提出,我将尽力添加一些其他内容。谢谢。

评论由:alexmiller发表

如果您能更新票证以更好地描述补丁的方法那将非常有用。

评论由:joelittlejohn 提供

提出的补丁(clj840-20161122.diff)允许'each'配置文件通过使用'*'来访问与当前正在执行测试相关联的var。由于此更改,'each'配置文件能够访问与当前测试var相关的元数据,包括名称。

此补丁通过改变测试及其关联的 'each' fixture 运行时函数的包装顺序来实现上述功能。在此补丁之前,'each' fixture 被组合为一个单个高阶函数,然后给出一个 thunk,该 thunk 包含对 {{test-var}} 函数的调用来执行其主体。在此补丁之后,{{test-var}} 函数现在负责连接和执行 'each' fixture,但重要的是,它是在将当前测试变量添加到 * } 的绑定表达式中执行的。{{test-var}} 现在调用连接的 fixture 函数,而不是将包含对 {{test-var}} 调用的 thunk 传递给连接的 fixture 函数。

希望这足够清晰:)

评论由:joelittlejohn 提供

这次可以考虑将其包含在内吗?文件clj840-20161122.diff依然是有效的,并且可以应用于master的最新HEAD。

评论由:alexmiller发表

您能否检查更改函数顺序是否会影响do-report中的堆栈跟踪检查?基本上,我们需要知道在所有各种情况下(既不是each也不是once,是each但不是once,是once但不是each,以及两者)错误报告在这些情况下都没有受到影响。此外,Leiningen之类的工具也会修改这些部分的代码。我认为这都很好,但我可能不会立即检查所有这些。

...