Единственный способ избежать этой проблемы - применить макет («подделка») для всего теста, установив системное свойство fakes
(-Dfakes=your.fully.qualified.name.SystemMock
) в командной строке или в конфигурации выполнения теста Maven / Gradle..
Основная причина заключается в том, что классу java.lang.System
требуется вызов внутреннего метода "registerNatives()
" (или "initIDs()
" в некоторых других классах) для первоначального определениякласс (после того, как это сделано подделкой), чтобы быть восстановленным.Другие классы в JDK, которые также имеют native
методы, не имеют такого метода.JMockit отбросил вызов в последних версиях для совместимости с JDK 9+, а также потому, что это был хак, сделанный необходимым только из-за особенностей JDK (которые должны быть решены в самом JDK).