使用ASM Bytecode进行测试

时间:2011-11-02 08:57:22

标签: java unit-testing testing bytecode java-bytecode-asm

假设我正在编写一个类,我想在其中添加一些指令到某个方法的某些部分。例如,让我们考虑一下我希望开发一个访问者V来重置方法C.m()中存在的方法调用指令的情况,从C.n()C.n_detour()

V C之后运行TraceMethodVisitor之后测试的最简单方法是什么?确实可以得到预期效果?我在这里谈论xUnit样式测试。

起初我以为我可以在C上运行C.n_detour(),并将其与我自己的字符串进行比较,但结果发现有很多“装饰”说明(例如行编号等与我的测试基本无关(见Formatting the output of a TraceClassVisitor)。

从理论上讲,我知道我可以让一些访客运行并检查C.n()的存在和decoration的不存在,但我宁愿使用更多的东西上述方法(比较每条指令的指令)。

我看了一下ASM的Tree API,但它看起来并没有那么好,因为那些{{1}}指令也出现在那里。

有没有人有过使用ASM测试代码的经验?

1 个答案:

答案 0 :(得分:1)

使C.n_detour()受保护,在测试用例中扩展C并计算调用次数。

模式:你的所有仪器都会产生一些新的副作用 - 这就是你首先进行仪器测试的原因 - 所以编写测试来检查副作用是否存在。不要测试仪器的特定实现,而是测试“它是否具有预期的效果”。

可能需要一个新的类加载器将C的检测版本放在类路径上。

如果您使用Maven,我建议您在一个模块中进行测试并将测试放入第二个模块。

相关问题