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

时间:2013-10-12 10:28:07

标签: macros clojure

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

因为对宏的输入将是代码,输出也将是代码。对我来说,能够提出一些测试策略似乎很动态。

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

2 个答案:

答案 0 :(得分:1)

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

对于小型替换式宏,您可以测试几个示例的扩展形式。像Midje这样的测试框架对此有帮助,它有an =expands-to=> checker

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

答案 1 :(得分:0)

此:

  

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

你应该通过编写你期望的输出开始编写宏,所以你应该有一个例子。

您还可以测试宏发出的代码,并验证它是否按预期运行,与测试函数相同。