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的4行补丁足够了,它添加了`*test Var*`并在`each-fixture-fn`表单周围绑定它。

我将使用这个特性在用基本的`clojure.test`块(`deftest` + fixtures)进行`state-flow`测试库的重新实现中,以便与现有的Clojure工具生态系统更好地集成。没有在fixture中访问当前测试变量的能力,我在fixture中找不到执行某些测试设置的途径(请参阅https://gist.github.com/philomates/32f8e1f7a2a4e746ac0186964aaaa2d3#file-flow-clj-L74中的代码示例,以了解用例)

17 答案

0

评论者:stuart.sierra

或者直接将Var传递给fixture。Var是可调用的。

0

评论者:hugoduncan

我认为这不会工作,因为传递给fixture的函数不是test var,而是一个在test var上调用{{test-var}}的函数。

0

评论者:hugoduncan

为添加test-var的补丁

0

评论者:stuart.sierra

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

可能应该将{{:each}}的fixture函数在{{test-var}}中调用,而不是在test-all-vars中调用。(Var的命名空间可以在其元数据中获得。)但是在这种情况下,每次都必须在{{test-var}}中调用{{join-fixtures}}。

0

评论者:stuart.sierra

尝试这个补丁:clj840-2.diff。

这使得* }对于{{:each}}的fixture函数可见,这在直觉上似乎更正确。

但是,它会稍微改变{{test-var}}的行为,这对于我来说不是很满意。

0

评论者:hugoduncan

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

0

评论者:stuart.sierra

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

0

评论者:hugoduncan

我同意将其中的动态变量作为扩展接口的一部分,但是认为在编写测试时有一个函数会更加清晰。这只是我的一两分见解。

0

评论者:jafingerhut

在2013年11月22日的提交中,补丁文件clj840-2.diff不再适用于最新版本的主代码库。更新它可能看起来很简单,但最好由熟悉这部分代码的人来做。

0

评论者:joelittlejohn

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

我已添加了一个更新后的补丁,其内容与clj840-2.diff相同,但适用于当前主代码库(c0326d2),截至2016年11月22日。

0

评论者:joelittlejohn

我意识到我只翻译了某人提供的补丁,但如果您认为在它适合被考虑之前还需要其他内容,请大声说出来,我将努力添加更多内容。谢谢。

0

评论者:alexmiller

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

0
by

评论者:joelittlejohn

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

这个补丁通过改变在运行测试及其相关'each' fixture时函数包裹的顺序来实现上述功能。在此补丁之前,'each' fixture被合并到一个单一的高阶函数中,然后向其提供一个包含对{{test-var}}函数的调用的thunk作为它的主体。在此补丁之后,{{test-var}}函数现在负责连接并执行'each' fixture,但重要的是,它这样做是在添加当前测试变量到*}的表达式作用域内。现在{{test-var}}调用连接的fixture函数,而不是提供一个调用{{test-var}}的thunk给连接的fixture函数。

希望这很清楚,sort :)

0
by

评论者:joelittlejohn

现在是否有机会将其考虑包含进来?文件 clj840-20161122.diff 仍然有效,可以应用于 master 的当前 HEAD。

0
by

评论者:alexmiller

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

...