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}} 函数调用的汤作为其主体。在此补丁之后,{{test-var}} 函数现在负责连接和执行 'each' fixture,但重要的是,它是在添加当前测试变量到 * 的绑定表达式的范围内执行的。test-var 现在调用连接的 fixture 函数,而不是将包含调用 {{test-var}} 的汤的连接 fixture 函数提供给连接的 fixture 函数。

补丁: clj840-20161122.diff

您好,我想在此表达我的看法,即我觉得在我在其中工作的 Clojure 测试库中添加此功能将非常有用。

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

我打算使用这个特性来重新实现`state-flow`测试库,使用基础的`clojure.test`块(`deftest` + fixtues)以更好地整合现有的Clojure工具生态系统。由于无法访问当前测试变量,我无法在固定装置中实现某些测试设置(请参阅代码示例以了解用例)。

17 个答案

0
by

kommentar av: stuart.sierra

或者直接将Var传递到固定装置中。Vars可以被调用。

0
by

评论者:hugoduncan

我认为这不会奏效,因为传递给固定装置的函数不是测试变量,而是调用{{test-var}}的函数。

0
by

评论者:hugoduncan

修复以添加 test-var

0
by

kommentar av: stuart.sierra

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

也许应该将{{:each}}固定装置函数在{{test-var}}中而不是在test-all-vars中调用。(Vars的命名空间在其元数据中可用。)但是,然后我们必须在每次都调用{{join-fixtures}}。

0
by

kommentar av: stuart.sierra

尝试以下补丁:clj840-2.diff。

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

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

0
by

评论者:hugoduncan

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

0
by

kommentar av: stuart.sierra

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

0
by

评论者:hugoduncan

我同意将动态变量作为扩展接口的一部分,但我会认为有一个用于编写测试时使用的函数会更干净。只代表我的2美分意见。

0
by

评论者:jafingerhut

在2013年11月22日的一个提交中,patch clj840-2.diff不再能够干净地应用于最新的master。更新它可能看起来很简单,但最好由熟悉这部分代码的人来做。

0
by

评论者:joelittlejohn

如果这个问题得到修复将非常有用。

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

0
by

评论者:joelittlejohn

我意识到我仅仅翻译了其他人提供的补丁,但如果您认为这个补丁在进行考虑之前还需要添加更多内容,请告诉我,我会尽努力添加更多内容。谢谢。

0

由 alexmiller 发布的评论

如果您可以更新票据,以便更好地描述补丁的方案,那将会有所帮助。

0

评论者:joelittlejohn

建议的补丁(clj840-20161122.diff)允许 'each' 固定设施通过使用 * } 来访问与当前正在执行测试关联的 var。因此,'each' 固定设施能够访问与当前测试 var 关联的元数据,包括名称。

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

希望这还算清楚吧 :)

0

评论者:joelittlejohn

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

0

由 alexmiller 发布的评论

能否检查更改函数顺序是否影响 do-report 中的堆栈跟踪检查?基本上,在所有的各种情况(既不是 each,也不是 once,是 each 但不是 once,是 once 但不是 each,两者都是)中,都会是有用的,以知道错误报告不受这些情况的影响。此外,像 Leiningen 这样的工具也打补丁与此部分相关。我认为所有这些都是好的,但我可能不会很快检查这一点。

...