Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JMockIt fails with AgentInitializationException: Agent JAR loaded but agent failed to initialize

I am developing a plugin for Eclipse Kepler. Adding @RunWith(JMockit.class) to my test class causes the following error:

    JMockit: Reinitializing under custom class loader org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@b7ccec1[com.mypackage.myclass:2.3.9.201508161221(id=1)]
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
        at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:407)
Caused by: java.lang.VerifyError
        at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
        at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:170)
        at mockit.internal.startup.Startup.redefineMethods(Startup.java:242)
        at mockit.internal.startup.Startup.redefineMethods(Startup.java:236)
        at mockit.internal.mockups.MockClassSetup.applyClassModifications(MockClassSetup.java:134)
        at mockit.internal.mockups.MockClassSetup.redefineMethodsInClassHierarchy(MockClassSetup.java:91)
        at mockit.internal.mockups.MockClassSetup.redefineMethods(MockClassSetup.java:76)
        at mockit.MockUp.redefineMethods(MockUp.java:240)
        at mockit.MockUp.redefineClassOrImplementInterface(MockUp.java:222)
        at mockit.MockUp.<init>(MockUp.java:131)
        at mockit.integration.junit4.internal.RunNotifierDecorator.<init>(RunNotifierDecorator.java:21)
        at mockit.internal.startup.JMockitInitialization.loadInternalStartupMocksForJUnitIntegration(JMockitInitialization.java:42)
        at mockit.internal.startup.JMockitInitialization.initialize(JMockitInitialization.java:27)
        at mockit.internal.startup.Startup.applyStartupMocks(Startup.java:72)
        at mockit.internal.startup.Startup.reapplyStartupMocks(Startup.java:124)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at mockit.internal.util.MethodReflection.invoke(MethodReflection.java:94)
        at mockit.internal.util.MethodReflection.invoke(MethodReflection.java:159)
        at mockit.internal.startup.Startup.reinitializeJMockitUnderCustomClassLoader(Startup.java:118)
        at mockit.internal.startup.Startup.agentmain(Startup.java:101)
        ... 6 more
java.lang.IllegalStateException: com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:208)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:156)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:82)
        at org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:91)
        at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication$1.run(AbstractUITestApplication.java:35)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4145)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:140)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:611)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
        at org.eclipse.tycho.surefire.osgibooter.UITestApplication.runApplication(UITestApplication.java:31)
        at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication.run(AbstractUITestApplication.java:120)
        at org.eclipse.tycho.surefire.osgibooter.UITestApplication.start(UITestApplication.java:37)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
Caused by: com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize
        ... 39 more

Am I doing something wrong or it is a JMockIt bug? I am using version JMockIt 1.18, JUnit 4.12

like image 218
Sergey Avatar asked Aug 16 '15 15:08

Sergey


1 Answers

I would expect that @RunWith(JMockit.class) should have taken care of this problem.

In any case, from JMockit tutorial here, there are some notes that you should check, in case these resolve your issue. In particular, these two seem to be most relevant:

  • (Note for Eclipse users: when specifying the order of jars in the >classpath, make sure to use the "Order and Export" tab of the "Java Build >Path" window. Also, make sure the Eclipse project uses the JRE from a JDK >installation instead of a "plain" JRE, since the latter lacks the >"attach" native library.)
  • In other situations (like running on JDK implementations other than >the Oracle JDKs), you may need to pass "-javaagent:path>/jmockit.jar" as a JVM initialization parameter. This can be done in >the "Run/Debug Configuration" for both Eclipse and IntelliJ IDEA, or with >build tools such as Ant and Maven.
like image 159
JChrist Avatar answered Nov 01 '22 18:11

JChrist