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函数,而不是将一个thunk分配给连接后的fixture函数以调用{{test-var}}。

补丁:clj840-20161122.diff

你好,我想表示,我会觉得此功能的添加对我来说在工作的Clojure测试库中有用。

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

我打算在`state-flow`测试库的重实现中使用基础`clojure.test`块(`deftest` + fixtures)来实现更好的与现有Clojure工具生态系统集成。由于无法在fixture中访问当前测试变量,我在fixture中无法找到执行某些测试设置的方法(请参阅代码中的示例

17 个答案

0
by

评论区提到的:stuart.sierra

或者可以直接将 Var 直接传递到 fixture 中。Vars 是可调用的。

0
by

评论区提到的:hugoduncan

我认为这不会起作用,因为传给 fixture 的函数不是测试变量,而是一个调用{{test-var}}的函数。

0
by

评论区提到的:hugoduncan

添加 test-var 的补丁

0
by

评论区提到的: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
by

评论区提到的: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不再干净地应用于最新版本master。更新它似乎很简单,但最好由对这个代码部分有深入了解的人来完成。

0

评论者:joelittlejohn

如果这个能被修复我将非常感激。

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

0

评论者:joelittlejohn

我知道我只翻译了其他某人提供的补丁,但如果您认为在将其放在一起供考虑之前需要其他任何内容,请随时告知,我会努力添加更多的内容。谢谢。

0

评论者:alexmiller

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

0

评论者:joelittlejohn

提议的补丁(clj840-20161122.diff)允许'each'fixture通过使用*"来访问当前正在执行的测试关联的var。由于这种变化,'each'fixture能够访问与当前测试var关联的元数据,包括名称。

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

希望这说的是清楚:)

0

评论者:joelittlejohn

现在这个补丁有被考虑加入的机会吗?文件clj840-20161122.diff仍然有效,并可以应用到master的当前HEAD。

0

评论者:alexmiller

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

...