请在 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 被合并为一个单个的高阶函数,该函数然后被赋予一个包含对 {{test-var}} 函数调用的 thunk 作为其主体。在此补丁之后,现在的 {{test-var}} 函数负责连接和执行 'each' fixture,但重要的是,它在 绑定表达式的作用域内 执行。{{test-var}} 现在调用连接的 fixture 函数,而不是将包含对 {{test-var}} 函数调用的 thunk 传递给连接的 fixture 函数。

补丁: clj840-20161122.diff

你好,我想分享一下,我认为在 Clojure 测试库中加入这个功能会很有用。

对于我的用例,Duncan 的那个添加 `*test-var*` 并在其周围绑定 `each-fixture-fn` 形式的 4 行补丁就足够了。

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

在 * } 的基础上提供一个函数来返回当前 test-var 是否有意义?

不,该函数是 {{first}}

我同意将动态变量作为扩展界面的一部分,但认为在编写测试时有一个函数更为清晰。这只是我的个人看法。

评论者:jafingerhut

在2013年11月22日做出的提交中,补丁 clj840-2.diff 无法干净地应用到最新的 master 版本。更新它可能看起来很简单,但最好由熟悉这段代码的人来操作。

评论者:joelittlejohn

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

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

评论者:joelittlejohn

我明白我只翻译了其他人提供的补丁,但如果您认为在将其提交给考虑之前需要进一步的事情,请提出意见,我会尽力添加进一步的内容。谢谢。

评论者:alexmiller

如果能更新工单以更好地描述补丁的方法,将会有所帮助。

评论者:joelittlejohn

建议的补丁(clj840-20161122.diff)允许 'each' fixture 通过使用 * } 访问当前正在执行测试关联的 var。这个更改的结果是,'each' fixture 能够访问与当前测试 var 关联的元数据,包括名称。

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

希望这很清楚:ish :)

评论者:joelittlejohn

这个现在是否可以考虑添加?文件 clj840-20161122.diff 仍然有效,可以应用到 master 的当前 HEAD。

评论者:alexmiller

您能否检查更改函数顺序是否影响了 do-report 中的堆栈跟踪检查?基本上,了解在所有各种情况(既不是each也不是once,each但不是once,once但不是each,以及两者)中错误报告都不会受到影响将会有所帮助。此外,像Leiningen这样的工具也会改造这个部分。我认为所有这些都很好,但我可能不会很快检查所有这些。

...