Покрытие Java-кода от MATLAB

Я хотел бы измерить охват кода Java-кода, который запускается из MATLAB, предпочтительно с использованием EclEmma/jacoco. К сожалению, MATLAB имеет свои собственные загрузчики классов и не использует загрузчик классов контекста потока, поэтому нет очевидного способа заставить его выполнять инструментарий покрытия на лету. Я пытался использовать автономную контрольно-измерительную аппаратуру моей банки с помощью jacoco, но все, что я получил, это пустой файл данных.

Кто-нибудь успешно измерял покрытие кода Java при запуске из MATLAB, и если да, то как вы это сделали?

1 ответ

На самом деле я этого не делал, но это звучит так, как будто бы инструменты на лету должны выполняться с Matlab IDE и JaCoCo.

EclEmma для запуска вещей специально из Eclipse; для Matlab вы можете использовать JaCoCo самостоятельно даже для онлайн-анализа. Возможно, используя его Java-агент, который вы можете заставить Matlab загружать во встроенную JVM, предоставляя пользовательский java.opts файл в вашем каталоге запуска, который включает в себя -javaagent:... опция загрузки в JaCoCo, описанная на этой связанной странице.

Если вы прикрепите свои классы Java к статическому пути классов Java Matlab, а не к динамическому, они будут загружаться через обычные загрузчики классов системы Java вместо пользовательского Matlab и должны быть доступны для обычных инструментов покрытия кода Java. Эти пользовательские загрузчики классов Matlab предназначены только для классов на "динамическом" пути Matlab Java. Вы можете сделать это, предоставив javaclasspath.txt файл в вашем префе или в каталоге запуска или с помощью хакерского инструмента ClassPath. (Подробности см. В разделе "Включение Java-классов в рабочую область Matlab" и этот другой вопрос о статических и динамических манипуляциях с классами Java.)

И в зависимости от того, как JaCoCo подключается к JVM, вы, вероятно, можете указать и на пользовательские загрузчики классов Matlab - они являются загрузчиками классов URL, и вы можете получить доступ к объектам для них с помощью Java Reflection из сеанса Matlab. Документация JaCoCo (в "Миссии"), похоже, предполагает, что использование JaCoCo API вместо обычного вызова позволит вам работать с пользовательскими загрузчиками классов.

Другие вопросы по тегам