Можно ли использовать java.lang.instrument.Instrumentation в тестах JUnit? - PullRequest
6 голосов
/ 04 августа 2010

Можно ли использовать java.lang.instrument.Instrumentation в тестах JUnit? Я использую mockrunner для имитации сервлета и хочу измерить размер объектов, хранящихся в сеансе

Ответы [ 2 ]

1 голос
/ 15 апреля 2013

Да, это возможно, но не очень просто.

Проблема с использованием java.lang.instrument.Instrumentation заключается в том, что вам ВСЕГДА нужно использовать агент JVM. Хорошее введение в агенты JVM доступно в http://www.javabeat.net/2012/06/introduction-to-java-agents/.

Однако, поскольку ваши модульные тесты также выполняются в jvm, вы можете указать агент в качестве аргумента JVM.

Агент JVM с отчетами о памяти для того, что вы хотите сделать и готов к упаковке, доступен по адресу https://github.com/jbellis/jamm. Вы можете построить его с помощью Maven или Ant. Чтобы использовать его, вы создаете его и затем передаете следующее в качестве аргумента jvm при запуске модульного теста или набора тестов:

-javaagent:<path to>/jamm.jar

В модульных тестах вы можете создать экземпляр MemoryMeter и использовать его:

MemoryMeter meter = new MemoryMeter();
meter.measure(object);
meter.measureDeep(object);
meter.countChildren(object);
0 голосов
/ 21 мая 2011

Я использовал jmockit в модульном тестировании, это может издеваться над чем угодно.Расширяя это, java.lang.instrument.Instrumentation также должен работать.

...