假设我正在测试一个类,在该类中我想向方法的某些部分添加一些指令。例如,我们考虑一下这样一种情况,我希望开发访问者V
以将方法C.m()
中存在的方法调用指令从C.n()
更改为C.n_detour()
。使用ASM进行测试Bytecode
运行V
超过C
后,最简单的测试方法是什么?我在这里谈论xUnit风格测试。
起初,我以为我可以在C
运行TraceMethodVisitor
,并将它与我自己的字符串,但事实证明是有很多的在很大程度上是“装饰”的指令(如行号等)与我的测试无关(请参阅Formatting the output of a TraceClassVisitor)。
理论上我知道我可以让一些访问者运行并检查C.n_detour()
的存在和C.n()
的不存在,但我宁愿使用更多的东西(比较指令每条指令)。
我看了一下ASM的Tree API,但看起来并没有那么好,因为那些decoration
指令也出现在那里。
有没有人有过去使用ASM测试代码的经验?
这看起来确实是个好主意。 –
我知道为什么我没有想到过。问题是,目前没有简单的方法让整个班级都能正常工作。试图运行.class文件会产生错误。我从(仍然)不存在的类调用方法! –
然后按照我的第二条建议:创建一个项目,创建一个JAR,并将所有已检测的类作为输出。使用测试过的JAR创建另一个项目。在同一个项目中做这两件事是可能的,但很笨拙。 –