È possibile utilizzare java.lang.instrument.Instrumentation nei test JUnit? Sto usando mockrunner per simulare un Servlet e voglio misurare la dimensione degli oggetti memorizzati in una sessioneÈ possibile utilizzare java.lang.instrument.Instrumentation nei test JUnit?
risposta
Ho usato jmockit in test di unità questo potrebbe prendere in giro quasi tutto. Estendendo ciò, anche java.lang.instrument.Instrumentation dovrebbe funzionare.
Sì, questo è possibile, ma non molto semplice.
Il problema con l'utilizzo di java.lang.instrument.Instrumentation è che sarà SEMPRE necessario utilizzare un agente JVM. Una buona introduzione agli agenti JVM è disponibile al numero http://www.javabeat.net/2012/06/introduction-to-java-agents/.
Tuttavia, poiché i test dell'unità vengono eseguiti anche in jvm, è possibile specificare l'agente come argomento JVM.
Un agente JVM che segnala la memoria per ciò che si desidera fare e pronto per il confezionamento, è disponibile allo https://github.com/jbellis/jamm. Puoi costruirlo con Maven o Ant. Per usarlo, si costruisce e poi passare il seguente come argomento JVM quando si avvia il test di unità o unit test privato:
-javaagent:<path to>/jamm.jar
Entro i test di unità, è quindi possibile creare un'istanza della MemoryMeter e l'uso it:
MemoryMeter meter = new MemoryMeter();
meter.measure(object);
meter.measureDeep(object);
meter.countChildren(object);