我通常会制作函数并为它们编写单元测试。但是对于进行代码转换的宏,如何应用 macthing 预期值和实际值的逻辑?
因为宏的输入将是代码,输出也将是代码。这对我来说似乎很有活力,能够想出一些测试策略。
或者我可以使用宏的示例输入,并将表达式传递给 macroexpand-1 并将输出与预期的匹配?
我认为这两个例子都有优点。
对于小型替换式宏,您可以测试几个示例的扩展形式。像 Midje 这样的测试框架可以帮助解决这个问题,它有一个 =expands-to=> checker。
但是对于更复杂的示例,扩展表单在开发过程中通常会以微小的方式快速变化,这使得检查扩展表单变得非常脆弱。在这些示例中,我通常围绕宏的特定用途创建测试用例。
这个:
或者我可以使用宏的示例输入,并将表达式传递给 macroexpand-1 并将输出与预期的匹配?
您应该通过编写您期望的输出来开始编写宏,因此您应该已经有一个可用的示例。
您还可以测试来自宏的代码并验证它是否也按预期运行,就像测试函数一样。