是否可以在JUnit测试中使用java.lang.instrument.Instrumentation?

时间:2010-08-04 12:57:43

标签: java junit instrumentation

是否可以在JUnit测试中使用java.lang.instrument.Instrumentation?我使用mockrunner来模拟Servlet,并希望测量存储在会话中的对象的大小

2 个答案:

答案 0 :(得分:1)

是的,这是可能的,但不是很直接。

使用java.lang.instrument.Instrumentation的问题是您总是需要使用JVM代理。 http://www.javabeat.net/2012/06/introduction-to-java-agents/提供了对JVM代理的详细介绍。

但是,由于您的单元测试也在jvm中运行,因此您可以将代理指定为JVM参数。

https://github.com/jbellis/jamm提供了一个内存报告JVM代理,用于您想要执行的操作并准备好打包。 您可以使用Maven或Ant构建它。 为了使用它,你构建它,然后在启动单元测试或单元测试套件时将以下内容作为jvm参数传递:

-javaagent:<path to>/jamm.jar

在单元测试中,您可以实例化MemoryMeter并使用它:

MemoryMeter meter = new MemoryMeter();
meter.measure(object);
meter.measureDeep(object);
meter.countChildren(object);

答案 1 :(得分:0)

我在单元测试中使用了jmockit这几乎可以模拟任何东西。扩展一下,java.lang.instrument.Instrumentation也应该工作。