Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 是否有在Clojure中测试宏的策略?_Macros_Clojure - Fatal编程技术网

Macros 是否有在Clojure中测试宏的策略?

Macros 是否有在Clojure中测试宏的策略?,macros,clojure,Macros,Clojure,我通常会制作函数,并为它们编写单元测试。 但对于进行代码转换的宏,如何应用macthing预期值和实际值的逻辑呢 因为宏的输入是代码,输出也是代码。这对我来说是如此的有活力,以至于我能够想出一些策略来进行测试 或者我可以为宏使用一个示例输入,并将表达式传递给macroexpand-1,并将输出与预期的输出匹配?我认为这两个示例都有优点 对于小型替换样式宏,可以测试几个示例的扩展形式。像Midje这样的测试框架有助于实现这一点 但对于更复杂的示例,扩展表单通常在开发过程中以很小的方式快速变化,这使

我通常会制作函数,并为它们编写单元测试。 但对于进行代码转换的宏,如何应用macthing预期值和实际值的逻辑呢

因为宏的输入是代码,输出也是代码。这对我来说是如此的有活力,以至于我能够想出一些策略来进行测试


或者我可以为宏使用一个示例输入,并将表达式传递给macroexpand-1,并将输出与预期的输出匹配?

我认为这两个示例都有优点

对于小型替换样式宏,可以测试几个示例的扩展形式。像Midje这样的测试框架有助于实现这一点

但对于更复杂的示例,扩展表单通常在开发过程中以很小的方式快速变化,这使得检查扩展表单变得非常脆弱。在这些示例中,我通常围绕宏的特定用途创建测试用例。

这是:

或者我可以使用宏的示例输入,并将表达式传递给 macroexpand-1并将输出与预期输出匹配

无论如何,您应该通过编写预期的输出来开始编写宏,因此您应该已经有了一个可用的示例


您还可以测试宏生成的代码,并验证它是否也按预期运行,就像测试函数一样。

我在这里回答了一个非常类似的问题:-希望有帮助。