假设我正在检测一个类,我想在其中向方法的某些部分添加一些指令。例如,让我们考虑我想开发一个访问者V
将方法中存在的方法调用指令重命名C.m()
为C.n()
to 的情况C.n_detour()
。
什么是最简单的方法来测试运行后V
是否C
确实会得到预期的结果?我在这里谈论 xUnit 样式测试。
起初我以为我可以跑TraceMethodVisitor
过去C
,并将它与我自己的字符串进行比较,但结果发现有很多与我的测试无关的“装饰”指令(例如行号等)(见格式化 TraceClassVisitor 的输出)。
从理论上讲,我知道我可以让一些访问者运行并检查 a 的存在C.n_detour()
和不存在C.n()
,但我宁愿按照上述方法使用更多的东西(比较每条指令的指令)。
我查看了 ASM 的 Tree API,但它看起来并没有那么好,因为这些decoration
指令也显示在那里。
有没有人过去使用 ASM 测试代码的经验?