Ist es möglich, java.lang.instrument.Instrumentation in JUnit-Tests zu verwenden? Ich benutze mockrunner, um ein Servlet zu simulieren und möchte die Größe von in einer Sitzung gespeicherten Objekten messen.Ist es möglich, java.lang.instrument.Instrumentation in JUnit-Tests zu verwenden?
Antwort
Ich benutzte jmockit in Unit-Tests konnte dies fast alles vortäuschen. Wenn man das erweitert, sollte java.lang.instrument.Instrumentation auch funktionieren.
Ja, das ist möglich, aber nicht sehr einfach.
Das Problem bei der Verwendung von java.lang.instrument.Instrumentation ist, dass Sie IMMER einen JVM-Agenten verwenden müssen. Eine gute Einführung in JVM-Agenten finden Sie unter http://www.javabeat.net/2012/06/introduction-to-java-agents/.
Da Ihre Komponententests jedoch auch in einem jvm ausgeführt werden, können Sie den Agenten als JVM-Argument angeben.
Ein Speicherberichterstattungs-JVM-Agent für das, was Sie tun möchten und bereit zum Verpacken, ist unter https://github.com/jbellis/jamm verfügbar. Sie können es entweder mit Maven oder Ant bauen. Um es zu benutzen, können Sie es bauen und dann die folgenden als JVM-Argument übergeben, wenn Sie das Gerät zu testen oder Unit-Test-Suite zu starten:
-javaagent:<path to>/jamm.jar
Innerhalb der Unit-Tests können Sie dann die MemoryMeter instanziiert und Verwendung es:
MemoryMeter meter = new MemoryMeter();
meter.measure(object);
meter.measureDeep(object);
meter.countChildren(object);