有没有在Clojure中测试宏的策略?

Amo*_*kar 7 macros clojure

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

因为对宏的输入将是代码,输出也将是代码.这对我来说似乎很有活力,能够提出一些测试策略.

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

小智 1

我认为这两个例子都有其优点。

对于小型替换式宏,您可以测试一些示例的扩展形式。像 Midje 这样的测试框架可以帮助解决这个问题,它有一个 =expands-to=> 检查器

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