Est-il possible d'utiliser java.lang.instrument.Instrumentation dans les tests JUnit? J'utilise mockrunner pour simuler une servlet et que vous voulez mesurer la taille des objets stockés dans une sessionEst-il possible d'utiliser java.lang.instrument.Instrumentation dans les tests JUnit?
Répondre
J'ai utilisé jmockit dans les tests unitaires cela pourrait se moquer de presque tout. En étendant cela, java.lang.instrument.Instrumentation devrait aussi fonctionner.
Oui, c'est possible, mais pas très simple. Le problème avec l'utilisation de java.lang.instrument.Instrumentation est que vous aurez TOUJOURS besoin d'utiliser un agent JVM. Une bonne introduction aux agents JVM est disponible au http://www.javabeat.net/2012/06/introduction-to-java-agents/. Cependant, comme vos tests unitaires s'exécutent également dans un environnement jvm, vous pouvez spécifier l'agent en tant qu'argument JVM.
Un agent JVM de création de rapports de mémoire pour ce que vous voulez faire et prêt à être emballé est disponible au https://github.com/jbellis/jamm. Vous pouvez le construire avec Maven ou Ant. Pour l'utiliser, vous le construisez, puis passez le suivant comme argument jvm lorsque vous démarrez le test unitaire ou une suite test unitaire:
-javaagent:<path to>/jamm.jar
Dans les tests unitaires, vous pouvez instancier le MemoryMeter et l'utilisation il:
MemoryMeter meter = new MemoryMeter();
meter.measure(object);
meter.measureDeep(object);
meter.countChildren(object);