Есть ли способ использовать JMockit без -javaagent с Java 8+/JUnit 5?

Есть ли способ использовать JMockit без -javaagent в Java 8/Junit 5 ? Я помню, что в более старой версии JMockit была возможность использовать API-интерфейс для динамической загрузки javaagent (см. без -javaagent), но я больше не могу найти его в библиотеке версии 1.49.

Не все члены моей команды будут знать/понимать, что им нужно добавлять параметр -javaagent vm каждый раз, когда они хотят запустить модульный тест из IntelliJ, поэтому искал способ заставить агент JMockit загружаться всякий раз, когда тест был запускать без специальной настройки.

Существует плагин JMockit для Eclipse, который обеспечивает правильное указание javaagent, но я не смог найти ничего подобного для IntelliJ.

Есть ли в JMockit поддержка для загрузки/запуска без javaagent?


person Eric B.    schedule 31.05.2020    source источник
comment
Лучшим подходом (ИМХО) было бы проверить, загружен ли агент, и выдать описательное сообщение, если нет. Сообщение должно включать часть -javaagent, например JMockit требует запуска агента. Снова запустите тесты с аргументом виртуальной машины -javaagent:jmockit.jar.   -  person Johannes Kuhn    schedule 31.05.2020
comment
@JohannesKuhn, это отличная идея; есть метод Startup.verifyInstrumentation(), который я могу использовать из коробки. Но для тех, кто никогда раньше не видел код JMockit, это исключение может быть немного обескураживающим. Хотелось бы, чтобы был способ вообще обойти это требование.   -  person Eric B.    schedule 31.05.2020
comment
Что ж, у ByteBuddy есть способ установить агент в текущей запущенной JVM. Если вы хотите сделать это самостоятельно, создайте новую JVM, которая использует attach API для подключения к JVM.   -  person Johannes Kuhn    schedule 31.05.2020
comment
@JohannesKuhn Я также только что наткнулся на github.com/electronicarts/ea-agent-loader но они говорят, что с JDK9 использование динамических java-агентов считается плохой практикой. Я все еще пытаюсь найти справочную информацию для этого.   -  person Eric B.    schedule 01.06.2020
comment
Да, именно поэтому вы должны запустить новый процесс Java, чтобы выполнить присоединение.   -  person Johannes Kuhn    schedule 01.06.2020
comment
В моем текущем проекте, который использует JMockit, никому в команде не нужно добавлять параметр -javaagent vm каждый раз, когда они хотят запустить модульный тест из IntelliJ, потому что IntelliJ сам позаботится об этом. Мы используем Maven, но я считаю, что он работает и с Gradle. Так в чем именно проблема в вашем случае?   -  person Rogério    schedule 08.07.2020