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