假设我正在编写一个类,我想在其中添加一些指令到某个方法的某些部分。例如,让我们考虑一下我希望开发一个访问者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测试代码的经验?
答案 0 :(得分:1)
使C.n_detour()
受保护,在测试用例中扩展C
并计算调用次数。
模式:你的所有仪器都会产生一些新的副作用 - 这就是你首先进行仪器测试的原因 - 所以编写测试来检查副作用是否存在。不要测试仪器的特定实现,而是测试“它是否具有预期的效果”。
可能需要一个新的类加载器将C
的检测版本放在类路径上。
如果您使用Maven,我建议您在一个模块中进行测试并将测试放入第二个模块。